15,979
社区成员
发帖
与我相关
我的任务
分享
CWinThread* pThread = NULL;
CNewDlg* pDlg = NULL;
afx_msg LRESULT OnCreateDlg(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT OnQuitDlg(WPARAM wParam, LPARAM lParam);
#define UM_DLG WM_USER+10
#define UM_QUIT WM_USER+11
BEGIN_MESSAGE_MAP(CXXDlg, CDialog)
....
ON_MESSAGE(UM_DLG, &CXXDlg::OnCreateDlg)
ON_MESSAGE(UM_QUIT, &CXXDlg::OnQuitDlg)
END_MESSAGE_MAP()
UINT __cdecl ThreadProc(LPVOID lParam)
{
HWND hWnd = (HWND)lParam;
PostMessage(hWnd, UM_DLG, 0, 0);
MSG msg;
PeekMessage(&msg, NULL, 0, 0, PM_REMOVE);
while(GetMessage(&msg, NULL, 0, 0))
{
switch(msg.message)
{
case UM_QUIT:
{
PostMessage(hWnd, UM_QUIT, 0, 0);
return 0;
}
default:
break;
}
}
return 0;
}
LRESULT CXXDlg::OnCreateDlg(WPARAM wParam, LPARAM lParam)
{
if(!pDlg)
{
pDlg = new CNewDlg;
pDlg->Create(IDD_DIALOG1);
pDlg->ShowWindow(SW_SHOW);
}
return 0;
}
LRESULT CXXDlg::OnQuitDlg(WPARAM wParam, LPARAM lParam)
{
pDlg->DestroyWindow();
delete pDlg;
pDlg = NULL;
return 0;
}
void CXXDlg::OnOK()// 创建线程,在线程中创建对话框
{
// TODO: Add extra validation here
pThread = AfxBeginThread(ThreadProc, (LPVOID)GetSafeHwnd());
ASSERT(pThread);
}
void CXXDlg::OnButton1() //发送消息给线程,通知线程关闭对话框,并退出
{
// TODO: Add your control notification handler code here
pThread->PostThreadMessage(UM_QUIT, 0, 0);
}