线程与对话框

bygones 2001-04-28 01:55:00
我在一个基于对话框的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按钮会有消息处理呢?麻烦各位释疑,相烦讲解的祥细一些。
我如何控制与线程相关的消息队列呢(包括创建,删除,使用等)?



...全文
54 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bygones 2001-04-29
  • 打赏
  • 举报
回复
真不明白,这个问题难道就那么不值得回答吗?还是很多人来这儿是为了分数?
happyeveryday 2001-04-28
  • 打赏
  • 举报
回复
关注
sunriselx 2001-04-28
  • 打赏
  • 举报
回复
care

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧