总结:MFC中一个对话框的关闭过程
来源:互联网 发布:windows激活不可用 编辑:程序博客网 时间:2024/06/06 01:47
总结:MFC中一个对话框的关闭过程 .
说起来挺简单的,一个对话框关闭时要依次调用该类的DestroyWindow-OnDestroy-PostNcDestroy,根据关闭的方法不同,在这些函数之前会调用OnOK、OnCancle或者OnClose。
这里要说的是,模态对话框的消息循环要到调用了PostNcDestroy之后才真正的结束,即ContinueModal循环在这里才结束,然后类的析构函数将被调用,这个对话框才真正的被销毁了。
如果一个模态对话框还有一个模态的子对话框,那就更要注意了。如果子对话框还在显示的时候,父对话框由于某种原因关闭了(如从其他线程接收到了WM_CLOSE消息),父对话框在执行完OnClose函数后会等到,直到子对话框销毁了,才会继续执行自己的如第一段所说的关闭过程。
今天遇到的问题就是父对话框中保存子对话框的指针,为了让主对话框在关闭的时候先关闭所有的子窗口,在父对话框的OnClose里调用了delete pDlgChld,结果程序直接崩溃。后来改成先给子对话框发一个WM_CLOSE消息再delete,还是崩溃,又试了发WM_DESTROY、调子对话框的DestroyWindows,都不行。 看了上面的说明这里应该很清楚了,程序处理完这些消息后子对话框还在继续它的ModalLoop,这时候要delete对象肯定就会导致崩溃了。
解决办法其实很简单,把对子对话框指针的delete移到OnClose之后的任意一个函数中,这样就不会导致崩溃。因为父对话框在执行完OnClose后会等待直到它的子对话框结束,执行到OnClose之后的函数里时子对话框的生命期已经结束了,这时删除指针就不会有任何问题。
其实我们最好不要改变MFC对这套机制的处理,这样对资源的管理也是最合理的。
分类: MFC
绿色通道: 好文要顶 关注我 收藏该文与我联系
0
0
(请您对文章做出评价)
« 博主上一篇:javascript event 事件解析 .
» 博主下一篇:MFC中对话框窗体以动画形式显示
» 博主下一篇:MFC中对话框窗体以动画形式显示
void CMainFrame::OnMyquit() {// TODO: Add your command handler code hereCMainFrame::~CMainFrame();}
- 总结:MFC中一个对话框的关闭过程
- 总结:MFC中一个对话框的关闭过程
- 总结:MFC中一个对话框的关闭过程
- 总结:MFC中一个对话框的关闭过程 .
- 关于MFC中回车关闭对话框的问题的解决
- MFC应用程序中关闭模式对话框的顺序
- MFC中防止Enter和ESC关闭对话框的方法
- VS2010的MFC对话框程序中添加菜单栏的过程
- VS2010的MFC对话框程序中添加菜单栏的过程
- MFC窗口的关闭过程
- MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序
- MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序
- MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序
- MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序
- MFC应用程序中处理消息的顺序,创建窗口的过程关闭窗口的顺序(非模态窗口),打开模式对话框的函数调用顺序
- VS2010/MFC编程入门之十一中(对话框:模拟对话及其弹出过程)学习时的一个注意点
- MFC中一个进程的产生过程
- MFC取消对话框的关闭按钮
- jquery.validate.js
- FFMPEG解码流程
- HDU1166 敌兵布阵
- 认识FreeMark时间格式处理
- 500 OOPS:cannot change directory:/root 问题
- 总结:MFC中一个对话框的关闭过程
- 下载Spring3的官方源代码
- 编程之美系列之二叉树2—二叉树的距离问题(续)
- 查找带回——子父页面数据交互
- 2012蓝桥杯省赛第五题 转方阵(矩阵倒置)
- 构建现代站点且同时支持旧版 IE 的 20 个提示
- 嵌入式视频——好东西要一起分享!!!
- win8开发的一个小模块(猜算式)
- UVA 127 "Accordian" Patience