WM_DESTROY、WM_CLOSE和WM_QUIT
来源:互联网 发布:java解析两层xml字符串 编辑:程序博客网 时间:2024/09/21 09:00
一、理解之一
WM_CLOSE和WM_DESTROY同属窗口消息,WM_QUIT则不在窗口消息之列。三者先后执行顺序是WM_CLOSE、WM_DESTROY、WM_QUIT,但需要注意的是MFC窗口默认取消按钮函数OnCancel()是不会触发WM_CLOSE消息,只触发WM_DESTROY。
WM_CLOSE
当点击窗口右上角的 'X' 或使用SendMessage(WM_CLOSE)时,窗口就会收到WM_CLOSE消息。这个消息可以让DefWindowProc处理,也可以自己处理,例如询问用户是否保存更改等。如果用户选择“取消”,那么程序照常运行;如果用户确认要退出,窗口消失。这一消息处理完毕后,就调用DestroyWindow函数。
DestroyWindow函数向窗口过程发送WM_DESTROY。虽然此时窗口已经销毁,但进程并不会结束。一般处理WM_DESTROY时都是释放资源(例如申请的内存等),处理完毕后调用PostQuitMessage函数。
WM_QUIT
PostQuitMessage会发送WM_QUIT给消息队列。注意,WM_QUIT永远不会到达窗口过程,因为GetMessage得到WM_QUIT后就会返回FALSE,从而结束消息循环,最后进程结束,程序退出。
二、理解之二
DefWindowProc对WM_CLOSE的处理是调用DestroyWindow, DestroyWindow完成窗口的清理工作,最后像窗口过程发送WM_DESTROY。对于WM_DESTROY,DefWindowProc不会处理。也就是说,你如果不处理这个消息,虽然你的窗口已经销毁,但进程并不会结束。一般处理WM_DESTROY时都是释放资源(例如申请的内存等),然后调用PostQuitMessage。
PostQuitMessage会发送WM_QUIT给消息队列。注意,WM_QUIT永远不会到达窗口过程,因为GetMessage得到WM_QUIT后就会返回FALSE,从而结束消息循环,最后进程结束,程序退出。
从这里我们可以得出一些结论,当WM_CLOSE,WM_DESTROY,WM_QUIT被处理时,我们可以不用管系统或者我们对它做了什么,但是有一点可以肯定,窗口类的析构函数并没有被调用,至少从理论上是这么分析的,但是窗口的句柄等系统资源已经被关闭,释放。知道这些后我们可以做什么呢,因本人最近想关掉窗口句柄节省资源,依然可以使用窗口类中自定义的函数以及属性。析构函数没有被调用说明这个窗口类其实还存在。那我们就可以继续使用
- WM_DESTROY、WM_CLOSE和WM_QUIT
- WM_CLOSE WM_QUIT 和 WM_DESTROY EndDialog的区别
- WM_QUIT,WM_CLOSE,WM_DESTROY
- WM_CLOSE、WM_QUIT、WM_DESTROY区别
- WM_DESTROY, WM_CLOSE, WM_QUIT 区别
- WM_CLOSE WM_DESTROY WM_QUIT 区别
- WM_DESTROY ,WM_CLOSE,WM_QUIT
- WM_QUIT,WM_CLOSE,WM_DESTROY .
- WM_CLOSE WM_DESTROY WM_QUIT 区别
- WM_CLOSE, WM_DESTROY, WM_QUIT
- WM_CLOSE WM_DESTROY WM_QUIT 区别
- WM_CLOSE WM_DESTROY WM_QUIT 区别
- WM_QUIT,WM_CLOSE,WM_DESTROY
- WM_CLOSE WM_DESTROY WM_QUIT 区别
- WM_QUIT,WM_CLOSE,WM_DESTROY
- WM_CLOSE WM_DESTROY WM_QUIT消息
- WM_QUIT,WM_CLOSE,WM_DESTROY
- WM_CLOSE、WM_DESTROY、WM_QUIT
- LFS之了解GRUB
- 把无限循环小数化为分数(转载,相当不错)
- varchar和nvarchar的区别
- FCKeditor中添加删除图片的功能!
- Section 5.2 Snail Trails
- WM_DESTROY、WM_CLOSE和WM_QUIT
- 用WCAT进行IIS压力测试
- LFS之安装BUG记录
- 复制粘贴命令装LFS(SSH,PUTTY)
- 由于已明确禁止所请求的页类型,无法对该类型的页提供服务。扩展名“.mdb”可能不正确 解决办法
- “金奖红茶”生产企业遴选为世博茶制造商
- LFS配置IP及安装OpenSSH
- LFS之Xorg7.2安装
- 精茶”不等于“经茶