非模态对话框的销毁_qdialg非模态销毁-程序员宅基地

技术标签: dialog  function  WIN32 / MFC  delete  class  框架  

非模态对话框相对于模态对话框,他的创建和销毁过程和模态对话框有一定的区别

先看一下MSDN的原文:

When you implement a modeless dialog box, always override the OnCancel member function and call DestroyWindow from within it. Don’t call the base class CDialog::OnCancel, because it calls EndDialog, which will make the dialog box invisible but will not destroy it. You should also override PostNcDestroy for modeless dialog boxes in order to delete this, since modeless dialog boxes are usually allocated with new. Modal dialog boxes are usually constructed on the frame and do not need PostNcDestroy cleanup.

MS的指示:非模态对话框需要重载函数OnCanel,并且在这个函数中调用DestroyWindow。并且不能调用基类的OnCancel,因为基类的OnCancel调用了EndDialog这个函数,这个函数是针对模态对话框的。
还有一个必须重载的函数就是PostNcDestroy,这也是一个虚函数,通常的非模态对话框是用类的指针,通过new创建的,这就需要在PostNcDestroy函数中delete掉这个指针。

了解了理论过后,下面我们就可以用代码实现一下非模态对话框的创建和销毁过程:
//建立
//主框架中:
CTestDlg *pDlg=new CTestDlg;
pDlg->Create(IDD_TESTDLG,this);
pDlg->ShowWindow(SW_SHOW);

//对话框中:
void CTestDlg::OnCancel()
{
DestroyWindow();
}

void CTestDlg::PostNcDestroy()
{
CDialog::PostNcDestroy();
delete this;
}

如果要在点击按钮的情况下,销毁非模态对话框,只需要把按钮的事件映射到OnCancel函数即可。

 

其实上面没说明原因,原因是对于非模态对话框,其对象是创建在堆中的

关于各种窗口销毁过程参见

http://blog.csdn.net/geeeeeeee/archive/2009/01/02/3686093.aspx

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/geeeeeeee/article/details/3659200

智能推荐

win7、8 cmd开启3389,并添加用户至远程桌面组_直接添加用户,开启3389登陆-程序员宅基地

文章浏览阅读2.3w次。wmic /namespace:\root\cimv2\terminalservices path win32_terminalservicesetting where (__CLASS != “”) call setallowtsconnections 1wmic /namespace:\root\cimv2\terminalservices path win32_tsgeneralsetti_直接添加用户,开启3389登陆

CDH集群管理界面打开oozie的Web页面报错:Oozie web console is disabled_cdh打开oozie oozie web console is disabled. to enabl-程序员宅基地

文章浏览阅读847次。一、错误说明CDH集群管理界面打开oozie的Web页面报错二、问题解决根据提示查看Oozie Quick Start 发现是缺少ExtJS 2.2库(必须是2.2版)①进入/var/lib/oozie目录cd /var/lib/oozie②下载ext-2.2库wget http://archive.cloudera.com/gplextras/misc/ext-2.2.zip ..._cdh打开oozie oozie web console is disabled. to enable oozie web console inst

ap和无线路由器区别_ap面板与路由器的功率一样吗-程序员宅基地

文章浏览阅读2.3k次。无线AP和无线路由器的区别 随着无线网络的快速发展,轻松便捷的无线世界已经融入到我们的工作生活当中。无论是soho用户还是家庭用户,组建小型的无线局域网都已成为他们首选的组网方案,然而面对陌生的网络协议以及众多的网络设备,你是否能够一一认清它们呢? 就像很多人很容易混淆无线上网卡和无线网卡一样,很多用户也分不清无线AP和无线路由,小峰便是其中的一位。 小峰是一个典型的宅_ap面板与路由器的功率一样吗

生成模型--GAN用于消除运动模糊(Motion Blur)_raw域 motion blur去除-程序员宅基地

文章浏览阅读2k次。消除运动模糊与GAN  终极议题:在没有提供任何关于核(kernel)或相机的运动信息的情况下,怎样去除单张照片中的运动模糊(Motion Blur)呢?  这不禁让人联想起生成对抗网络(GAN),因为它能够保存高纹理细节,创建的图案又接近真实图像,所以是图像超分辨率和图像修复中的主力军。  可以将其用于消除运动模糊。模糊处理可以看作是图像转化中的一个特例,研究人员提出基于条件生成式对抗网络..._raw域 motion blur去除

OJ1067: 有问题的里程表(c语言)_1067 : 有问题的里程表-程序员宅基地

文章浏览阅读964次。题目描述某辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位(个位、 十位、百位等)上的数字都是如此。例如,如果里程表显示339,汽车走过1公里之后,该里程表显示350。输入输入一个整数num,表示里程表显示的数值,1 < num < 1000,且一定不含整数4。输出输出一个整数,为该汽车实际行驶的公里数。例如,如果该里程表显示55,则实际走过的公里 数是40。样例输入 Copy106样例输出 C_1067 : 有问题的里程表

引用(&)_引用(&a)[10]-程序员宅基地

文章浏览阅读87次。引用(&)给已定义的变量取一个别名,两者用法相同。int a =10; //定义一个变量aint &c=a; //&符号放在定义时,不是取地址,而是引用。 //声明a的一个引用,c是a的一个别名 //a与c的地址是相同的引用与指针不同1.常量的引用int &a=12; //会报错const int &a=12; //可以这样修改2.数组的引用int arr[12];int (_引用(&a)[10]

随便推点

中医药本体概念描述体系的自动构建研究-程序员宅基地

文章浏览阅读838次。http://www.etc.edu.cn/articledigest47/%E4%B8%AD%E5%8C%BB%E8%8D%AF%E6%9C%AC%E4%BD%93%E6%A6%82%E5%BF%B5%E6%8F%8F%E8%BF%B0%E4%BD%93%E7%B3%BB%E7%9A%84%E8%87%AA%E5%8A%A8%E6%9E%84%E5%BB%BA%E7%A0%94%E7%A9%B6.pdf刘 耀  穗志方  周 扬  王振国(中国科

GDB常用命令总结_detaching from process-程序员宅基地

文章浏览阅读1.1k次。常用命令(From:http://my.donews.com/tangfl/2006/10/23/gdb-debug-example/)  break NUM 在指定的行上设置断点。  bt 显示所有的调用栈帧。该命令可用来显示函数的调用顺序。  clear 删除设置在特定源文件、特定行上的断点。其用法为clear FILENAME:NUM  continue 继续执行正在调试的程..._detaching from process

点与多边形的叠加分析_点与多边形叠置的例子-程序员宅基地

文章浏览阅读7.1k次。一个点图层与一个多边形图层叠加,计算每个多边形中有多少个点,是一个很长见的操作。但是如果没有意识到点落在多边形边界上的特殊情况,很可能,你会得到一个错误的结果。比如看这个情景,多边形代表一些地区,点表示房产,每个点有个hhsize的属性,表示这个房产中有多少人。最后需要计算每个地区中的人数。上图,把hhsize符号化表示出来。具体方法很多,但比较“标准”的做法,是使_点与多边形叠置的例子

Log4j2高危漏洞CNVD-2021-95914分析复现修复_warn error looking up jndi resource-程序员宅基地

文章浏览阅读6.4k次。漏洞描述安全公告编号:CNTA-2021-0033安全公告编号:CNTA-2021-00322021年12月10日,国家信息安全漏洞共享平台(CNVD)收录了Apache Log4j2远程代码执行漏洞(CNVD-2021-95914)。攻击者利用该漏洞,可在未授权的情况下远程执行代码。目前,漏洞利用细节已公开,Apache官方已发布补丁修复该漏洞。CNVD建议受影响用户立即更新至最新版本,同时采取防范性措施避免漏洞攻击威胁。一、漏洞情况分析Apache Log4j是一个基于Java的_warn error looking up jndi resource

阿里云服务器实例规格型号、功能、型号级别介绍及选择_阿里云 安全的产品型号怎么看-程序员宅基地

文章浏览阅读1.2k次。阿里云服务器ECS服务器不同与传统物理服务器,ecs服务器在购买的时候分为很多实例规格族。那么到底有哪些实例规格族呢?再者那种实例规格族适用于我?很多初次购买阿里云服务器用户在选择的时候往往不知道如何选择。在具体选购过程中,要是我们不清楚怎样挑选具体的硬件配置,可以参照阿里云官方文档:配置选型,按照官方建议切合自己具体情况挑选适用于自己的规格实例。也可以参考下面的相关介绍选择。一、阿里云实例规格包含哪些规格实例?阿里云提供了各种规格的ECS实例规格型号,各自有其不同的特性、在售规格型号和适用场景。相_阿里云 安全的产品型号怎么看

Flutter常用第三方库整理_flutter 第三方ui库-程序员宅基地

文章浏览阅读2.8k次。记录一下,防止有需要的时候才去慢慢找不定时更新贴出来的版本并不一定是最新版本,想要获取最新版本,只能去对应的链接获取谷歌地图google_maps_flutter: ^0.5.21+15https://pub.flutter-io.cn/packages/google_maps_flutter图片缓存cached_network_image: ^2.0.0..._flutter 第三方ui库

推荐文章

热门文章

相关标签