OnClose()和 OnDestroy()
2016-05-10 09:33
232 查看
基于对话框的MFC程序,发现每次程序退出时,托盘的小图标不能自动消失,鼠标移上去之后才能消失,比较不爽。
后来发现我删除这个图标的代码是在自己重写的OnClose()函数中,结果断点一看,OnClose()根本没有被调用,确切的说是点“退出”不调用,点右上角的“叉”才调用,难怪出现这个结果,后来还有我想在OnClose()函数中有其他操作也没有被调用。
在http://www.qqgb.com/Program/VC/VCJC/Program_250726.html上看到了一个很好的回帖:
1. 点“确定”、“取消”时的关闭路由为
OnOK()或OnCancel() ---> EndDialog() ---> DestroyWindow() ---> OnDestroy() ---> PostNcDestroy()
2. 点“关闭”标题栏按钮的关闭路由为
OnClose()---> DestroyWindow() ---> OnDestroy() ---> PostNcDestroy()
所以OnClose()并不是关闭路由的必经路径, OnDestroy() 才是程序关闭的必经路径,因此重写OnDestroy() ,把我需要在程序结束的操作全部放到了这个函数里面,OK了,不过还要记得把ON_WM_DESTROY()加到MESSAGE MAP里面。
后来发现我删除这个图标的代码是在自己重写的OnClose()函数中,结果断点一看,OnClose()根本没有被调用,确切的说是点“退出”不调用,点右上角的“叉”才调用,难怪出现这个结果,后来还有我想在OnClose()函数中有其他操作也没有被调用。
在http://www.qqgb.com/Program/VC/VCJC/Program_250726.html上看到了一个很好的回帖:
1. 点“确定”、“取消”时的关闭路由为
OnOK()或OnCancel() ---> EndDialog() ---> DestroyWindow() ---> OnDestroy() ---> PostNcDestroy()
2. 点“关闭”标题栏按钮的关闭路由为
OnClose()---> DestroyWindow() ---> OnDestroy() ---> PostNcDestroy()
所以OnClose()并不是关闭路由的必经路径, OnDestroy() 才是程序关闭的必经路径,因此重写OnDestroy() ,把我需要在程序结束的操作全部放到了这个函数里面,OK了,不过还要记得把ON_WM_DESTROY()加到MESSAGE MAP里面。
相关文章推荐
- osv 添加自己的c++ app程序
- find 命令详解
- cojs EX_香蕉 题解报告
- 第4课 :Spark Streaming的Exactly-One的事务处理和不重复输出彻底掌握
- poj3250+单调栈,换种数据结构和思维解决问题
- 二叉树反转
- android应用开发(十):widget的使用
- DBUtils使用笔记
- BZOJ4384: [POI2015]Trzy wieże
- No enclosing instance of type * is accessible.
- hduoj 不容易系列之一--1465
- Spring结合java Quartz配置实例代码
- 河南省第四届acm省赛 序号互换(进制转化)
- StrictMode总结
- 如何配置Kettle集群运行环境
- C#中的引用传递、值传递。
- 常用的一些工具网址
- 友盟分享中新浪分享回调时程序崩溃的解决方法 application cannot be case to android.app.Activity
- Superblock mount time is in the future(转载)
- 游戏编程十年总结(上)