***************模态对话框的消息循环//************************

ywfscu 2005-09-28 12:35:19
建了一个基于对话框的MFC程序
在一个消息处理中,有一个死循环
为了响应其他消息,

while (1)
{

/*
* 响应其他消息
*
*/
MSG msg;
if (::PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
msg.message ;
if (msg.message == WM_COMMAND)
{
EndDialog(0) ;
break ;
//::PostQuitMessage(0) ;
}
else
{
::TranslateMessage(&msg) ;
::DispatchMessage(&msg) ;
}
}
}


现在是能响应其他消息了,不过关闭对话框(程序)后,在资源管理器中还要该程序进程.

调试了一下,if (msg.message == WM_COMMAND) 这个语句根本就不会为真.当然对话框上还要其他控件

怎么解决?
...全文
201 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxyjyzxyjy 2005-10-07
  • 打赏
  • 举报
回复
注意你的问题:你是在一个消息处理中,有这样一个循环,也就是说这个消息也通过该过程所在的线程的GetMessage()函数从线程消息队列中取走了该消息,则PeekMessage()函数还可以从线程消息对列中取得同样的这个消息吗?????当你用SendMessage发送消息时,是直接进入消息循环而没有把消息放到线程消息队列中。
ywfscu 2005-10-07
  • 打赏
  • 举报
回复
确实是该用PostMessage ,上次回复是笔误..


还可能设个变量来设置是否循环.
dirdirdir3 2005-09-28
  • 打赏
  • 举报
回复
msg.message == WM_DESTROY
DentistryDoctor 2005-09-28
  • 打赏
  • 举报
回复
WM_CLOSE,WM_QUIT?
Kudeet 2005-09-28
  • 打赏
  • 举报
回复
靠,上面回复是垃圾,是因为你的PostQuitMessage(0)没有调用到。你要自己处理WM_COMMAND可以在函数PreTranslateMessage里拦截就可以了,不需要写这个消息循环
Kudeet 2005-09-28
  • 打赏
  • 举报
回复
在资源管理器中还要该程序进程,在适当的地方加句:PostQuitMessage退出整个系统就可以了
ywfscu 2005-09-28
  • 打赏
  • 举报
回复
你们说的那些消息都试过了没有一个成功的。

最后我自己定义了一个消息,要退出对话框时,
SendMessage,再在循环中检测。

15,980

社区成员

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

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