线程与对话框
我在一个基于对话框的mfc程序中,程序的主窗口为 CTestDlg,CtestDlg中有一个按钮
按钮的消息处理函数如下:
HANDLE hThread1 ;
CDlg2 dlg1 ; //CDlg2 是另一个对话框,功能仅仅是在当点击其上的一个按钮时弹出
一个消息框。
void CTest1Dlg::OnButton1()
{
DWORD threadid ;
hMainWnd = this ->m_hWnd ;
hThread1 = ::CreateThread ( NULL, 0, MyThread, &dlg1, 0, &threadid ) ;
return ;
}
上面的 MyThread 定义如下:
DWORD WINAPI MyThread ( LPVOID lpvoid ) {
CDlg2 * pdlg = ( CDlg2 * ) lpvoid ;
pdlg -> DoModal () ;
return 0 ;
}
当程序执行后,我点击主对话框中的 Button1,能够显示 dlg1, 但是dlg1仅能处理
Ok和Cancel按钮的消息(实际上是否正确处理了我也不知道,只是dlg1被关闭了,其它
没有任何症状),当我点击dlg1中自己设置的按钮就会出错,或者将鼠标移出该对话框
的客户区也会出现同样的错误,错误是debug assert failed,信息定位到
wincore.cpp中 884行,我没法弄清是什么原因,请大家赐教。
另外,我对windows下窗口消息与线程的关联性不清楚,msdn上说像 peekmessage,
getmessage只能取得该线程所创建的窗口的消息,但是上面我的这个程序,新创建的
子线程并没有消息循环,所以我的dlg1应该不可能取得任何的消息,为什么我点击
它的ok和cancel按钮会有消息处理呢?麻烦各位释疑,相烦讲解的祥细一些。
我如何控制与线程相关的消息队列呢(包括创建,删除,使用等)?