关于WM_QUIT,WM_CLOSE的小小问题

z752964360 2009-01-18 06:48:29
我练习的一个程序在响应一个右键菜单项时调用SendMessage(WM_QUIT)程序无法退出;
换成PostMessage(WM_QUIT)成功,不知为何请高手指教
...全文
158 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
z752964360 2009-01-18
  • 打赏
  • 举报
回复
谢谢大家 英语有点吃力
wltg2001 2009-01-18
  • 打赏
  • 举报
回复
WM_QUIT 是比较特殊的消息,对于这个消息有一个专门的API:PostQuitMessage ,所以最好不要用SendMessage或是PostMessage,这一点MSDN上有,下面是MSDN原文:
Remarks

The WM_QUIT message is not associated with a window and therefore will never be received through a window's window procedure. It is retrieved only by the GetMessage or PeekMessage functions.

Do not post the WM_QUIT message using the PostMessage function; use PostQuitMessage.

liuzxchina 2009-01-18
  • 打赏
  • 举报
回复
我认为SendMessage只是调用处理函数并返回,PostMessage则是将消息放在消息队列中。
当GetMessage在消息队列中取到WM_QUIT时,GetMessage返回值为0,然后循环退出,主线程退出。

另外建议使用PostQuitMessage()函数,而不是PostMessage(WM_QUIT);
arong1234 2009-01-18
  • 打赏
  • 举报
回复
注意:SendMessage从来不进队列,只有PostMessage才会进队列
arong1234 2009-01-18
  • 打赏
  • 举报
回复
个人认为只是发送的目的地错了,遇到WM——QUIT这样没有处理过程的消息,系统应该带一个错误码返回
不过没有试过,楼主要感兴趣可以试试

[Quote=引用 2 楼 bitxinhai 的回复:]
WM_QUIT消息比较的特别,他是不放进消息队列的!!
SendMessage是把消息传送到队列,然后等待消息处理完成,
WM_QUIT消息出来后,程序已经退出,就不会返回消息给等待线程,
从而造成等待线程一直等待,而不会退出!!!
[/Quote]
cnzdgs 2009-01-18
  • 打赏
  • 举报
回复
要分清哪些消息用Send哪些消息用Post来发。如果不清楚,可以查MSDN中各个消息的说明,里面都有提到。
bitxinhai 2009-01-18
  • 打赏
  • 举报
回复
WM_QUIT消息比较的特别,他是不放进消息队列的!!
SendMessage是把消息传送到队列,然后等待消息处理完成,
WM_QUIT消息出来后,程序已经退出,就不会返回消息给等待线程,
从而造成等待线程一直等待,而不会退出!!!
arong1234 2009-01-18
  • 打赏
  • 举报
回复
因为SendMessage把消息发送给当前窗口,而这个消息实际应该发送给的是当前线程(或者主线程?)

15,979

社区成员

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

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