一个失败的案例,一个线程创建非模态对话框,主线程做其它事,对话框按钮不能响应鼠标
2013-03-05 21:26
525 查看
#include "afxwin.h"
#include "STOPDialog.h"
class UIWorker :
public CWinThread
{
DECLARE_DYNCREATE(UIWorker);
public:
UIWorker(void);
~UIWorker(void);
bool CreateMyDlg( void );
void SetOwnerWnd( HWND hWnd );
void DestroyMyDlg( void );
bool GetDoneFlag();
BOOL InitInstance();
int ExitInstance();
private:
STOPDialog* m_pDlgTest;
HWND m_hOwnerWnd;
bool b_isShow;
};
#include "UIWorker.h"
#include "Resource.h"
IMPLEMENT_DYNCREATE(UIWorker,CWinThread)
UIWorker::UIWorker(void)
{
b_isShow=false;
}
UIWorker::~UIWorker(void)
{
}
bool UIWorker::GetDoneFlag()
{
return b_isShow;
}
bool UIWorker::CreateMyDlg( void )
{
m_pDlgTest = new STOPDialog;
if ( NULL == m_pDlgTest )
{
return false;
}
CWnd* pWnd = NULL;
/* if ( NULL != m_hOwnerWnd )
{
pWnd = reinterpret_cast<CWnd*>( CWnd::FromHandle( m_hOwnerWnd ));
if ( NULL == pWnd )
{
return false;
}
}*/
//BOOL bSuccess = m_pDlgTest->Create( IDD_DIALOG_STOP, pWnd );
BOOL bSuccess = m_pDlgTest->Create( IDD_DIALOG_STOP, NULL );
b_isShow=true;
if ( bSuccess )
{
bSuccess = m_pDlgTest->ShowWindow( SW_SHOW );
b_isShow=bSuccess;
}
MSG msg;
while(GetMessage(&msg,0,0,0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return bSuccess?true:false;
}
void UIWorker::DestroyMyDlg( void )
{
if ( NULL != m_pDlgTest )
{
delete m_pDlgTest;
m_pDlgTest = NULL;
}
}
BOOL UIWorker::InitInstance()
{
return CreateMyDlg();
}
int UIWorker::ExitInstance()
{
DestroyMyDlg();
return 0;
}
void UIWorker::SetOwnerWnd( HWND hWnd )
{
m_hOwnerWnd=hWnd;
}
void CcudamfcView::On32797()
{
// TODO: 在此添加命令处理程序代码
//if(m_pUIWorker!=NULL) delete m_pUIWorker;
m_pUIWorker = static_cast<UIWorker*>( AfxBeginThread(
RUNTIME_CLASS( UIWorker )));
//
while ( !m_pUIWorker->GetDoneFlag())
{
MSG msg;
::GetMessage( &msg, this->m_hWnd, NULL, NULL );
::TranslateMessage( &msg );
::DispatchMessage( &msg );
}
double m=0.0;
for(int i=1;i<100000;i++)
for(int j=1;j<1000000;j++)
for(int k=1;k<100000;k++)
m=i*j*k;
}
创建的对话框无法响应按钮事件
#include "STOPDialog.h"
class UIWorker :
public CWinThread
{
DECLARE_DYNCREATE(UIWorker);
public:
UIWorker(void);
~UIWorker(void);
bool CreateMyDlg( void );
void SetOwnerWnd( HWND hWnd );
void DestroyMyDlg( void );
bool GetDoneFlag();
BOOL InitInstance();
int ExitInstance();
private:
STOPDialog* m_pDlgTest;
HWND m_hOwnerWnd;
bool b_isShow;
};
#include "UIWorker.h"
#include "Resource.h"
IMPLEMENT_DYNCREATE(UIWorker,CWinThread)
UIWorker::UIWorker(void)
{
b_isShow=false;
}
UIWorker::~UIWorker(void)
{
}
bool UIWorker::GetDoneFlag()
{
return b_isShow;
}
bool UIWorker::CreateMyDlg( void )
{
m_pDlgTest = new STOPDialog;
if ( NULL == m_pDlgTest )
{
return false;
}
CWnd* pWnd = NULL;
/* if ( NULL != m_hOwnerWnd )
{
pWnd = reinterpret_cast<CWnd*>( CWnd::FromHandle( m_hOwnerWnd ));
if ( NULL == pWnd )
{
return false;
}
}*/
//BOOL bSuccess = m_pDlgTest->Create( IDD_DIALOG_STOP, pWnd );
BOOL bSuccess = m_pDlgTest->Create( IDD_DIALOG_STOP, NULL );
b_isShow=true;
if ( bSuccess )
{
bSuccess = m_pDlgTest->ShowWindow( SW_SHOW );
b_isShow=bSuccess;
}
MSG msg;
while(GetMessage(&msg,0,0,0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
return bSuccess?true:false;
}
void UIWorker::DestroyMyDlg( void )
{
if ( NULL != m_pDlgTest )
{
delete m_pDlgTest;
m_pDlgTest = NULL;
}
}
BOOL UIWorker::InitInstance()
{
return CreateMyDlg();
}
int UIWorker::ExitInstance()
{
DestroyMyDlg();
return 0;
}
void UIWorker::SetOwnerWnd( HWND hWnd )
{
m_hOwnerWnd=hWnd;
}
void CcudamfcView::On32797()
{
// TODO: 在此添加命令处理程序代码
//if(m_pUIWorker!=NULL) delete m_pUIWorker;
m_pUIWorker = static_cast<UIWorker*>( AfxBeginThread(
RUNTIME_CLASS( UIWorker )));
//
while ( !m_pUIWorker->GetDoneFlag())
{
MSG msg;
::GetMessage( &msg, this->m_hWnd, NULL, NULL );
::TranslateMessage( &msg );
::DispatchMessage( &msg );
}
double m=0.0;
for(int i=1;i<100000;i++)
for(int j=1;j<1000000;j++)
for(int k=1;k<100000;k++)
m=i*j*k;
}
创建的对话框无法响应按钮事件
相关文章推荐
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
- 10. 创建一个带有灯光且通过鼠标左键可以触发效果的密室案例(带火焰音效)
- 点击button按钮后,启动一个实现鼠标拖动另一个button的线程 (JFrame/C# WinForm)
- Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框
- 创建一个如下的窗体,并在窗体上放置colorDialog控件。实现功能:1)程序运行时,单击打开颜色对话框按钮,可选择颜色,并以所选颜色作为窗体背景色
- VS2013MFC对话框工程学习笔记四 - 为按钮添加一个响应事件二
- eclipse在新版本GTK(2.18) 上的一个bug--鼠标点击按钮无响应的解决办法
- 如果你需要对对话框上的一个按钮进行鼠标停靠提示
- Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭
- VC中实现按钮提示,使用CToolTipCtrl2007年01月23日 星期二 20:09如果你需要对对话框上的一个按钮进行鼠标停靠提示,那么这么做:
- CSS实例:创建一个鼠标感应换图片的按钮
- Android: 创建一个AlertDialog对话框,必须按确定或取消按钮才能关闭对话框,禁止按[返回键]或[搜索键]关闭
- java 加入一个线程、创建有响应的用户界面 。 示例代码
- 错误:在一个线程上创建的控件不能成为在另一个线程控件的父级(处理方法)
- 创建一个不能用鼠标操作的表单
- 有其它方法在对话框背景图片 指定区域添加鼠标单击响应事件
- :创建一个窗体;在窗体上添加一个按钮(text设置为 选择线颜色);向窗体添加一个颜色对话框(colorDialog1)单击按钮,能够打开一个颜色对话框,选择颜色,且更改画笔颜色