- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC中WM_CLOSE、WM_DESTROY、WM_QUIT消息出现顺序及调用方式
VC WM_CLOSE、WM_ DESTROY、WM_QUIT 消息出现顺序及调用方式
wxleasyland@
2012.7
wxleasyland 试验:
一、VC 建的标准WIN32-HELLO WORLD 程序中,
case WM_DESTROY:
//PostQuitMessage(0);将这行屏蔽
则,点关闭,窗口关闭了,但是程序进程还在!要在任务管理器 止。
二、VC 建的标准WIN32-HELLO WORLD 程序中,
1. 在WndProc()中加上
case WM_CLOSE:
WinExec(cmd /k echo WM_CLOSE: ,SW_SHOW);
break ;
2. 按右上角的X、点图标\关闭、或者按ALT+F4,都只出现cmd 窗,不会关闭程序。
因为原来是执行 default: return DefW indowProc(hWnd, message, wParam, lParam); 即
DefW indowProc 来处理WM_CLOSE 消息。现在被case WM_CLOSE:拦截了。
3. 点菜单里的FILE\EXIT,则就是执行case WM_COMMAND: 里的case IDM_EXIT: DestroyWindow(hWnd);
了。 不会执行case WM_CLOSE: !!!
DestroyWindow(hWnd); 会销毁窗口,同时发送WM_DESTROY 消息直接让WndProc()处理(不经过消
息队列)。
三、VC 建的标准WIN32-HELLO WORLD 程序中,
1. 在WndProc()中加上
case WM_CLOSE:
WinExec(cmd /k echo WM_CLOSE: ,SW_SHOW);
return DefWindowProc(hWnd, message, wParam, lParam);
break ;
case WM_DESTROY:
WinExec(cmd /k echo WM_DESTROY: ,SW_SHOW);
PostQuitMessage(0);
break ;
2. 按右上角的X、点图标\关闭、或者按ALT+F4,会先出现WM_CLOSE,再出现WM_DESTROY。
3. 点菜单里的FILE\EXIT,则只出现WM_DESTROY。
四、VC 建的标准WIN32-HELLO WORLD 程序中,如果用PostQuitMessage(0); 则不出现WM_CLOSE 。 也
不会出现 M_DESTROY !!!!!!! 窗口会关闭,程序退出。
这应该是正 的,WM_QUIT 让GetMessage()为0,从而WinMain()退出,然后操作系统会自动去销
毁窗口。主程序已经没了,所以即使WM_DESTROY 出现了也没用。
经试,在PostQuitMessage(0);后面的语句会继续执行到完。PostQuitMessage 只是产生一个WM_QUIT
消息到消息队列 并马上返回。
所以标准WIN32 程序是:
按右上角的X-出现WM_CLOSE
销毁窗口-产生WM_DESTROY-运行PostQuitMessage-WinMain 退出
菜单点EXIT-出现WM_COMMAND
运行PostQuitMessage
五、在MFC 对话框程序中,试验,是:
1. 先WM_CLOSE (这时窗口仍在显示)-再WM_DESTROY (窗口已经消失)-OnDestroy()执行完后,
程序完全退出
2. WM_CLOSE 不一定会出现。WM_CLOSE 点右上角的X ,点图标\关闭,或者按ALT+F4,会出现。 点
OK 按钮、或者Cancle 按钮,或者用任务管理器强行中止,都不会出现。
3. WM_ DESTROY 点右上角的X ,点OK 按钮、或者Cancle 按钮,都会出现。而且晚于WM_CLOSE 出
现。 用任务管理器强行 止,则不会出现。
4. 如果在程序 按一个按钮,里有PostQuitMessage(0); 则不出现WM_CLO
文档评论(0)