MFC的非模态对话框资源管理

简介:
非模态对话框比模态对话框更难使用这是众所周知的,这是由于模态对话框运行时,阻塞了其父窗口的消息循环,使其能自成一派,所以能够怡然自得。但非模态对话框只相当于一个由父窗体创建的一个同级的Hwnd,就像一个长大了的孩子,可以和父母并驾齐驱了,需要父母管又不能管的太厉害,其资源管理、通信都会比模态的更为复杂。  
很多时候,能用模态对话框的情况下,都会用模态的。虽然 Copper  老先生指着鼻子苦口婆心的教导了我们,但有时候人懒脸皮也就厚了,无所谓了。但,世界总是很残酷,很多时候(比如需要在处理对话框事件的时候也能响应窗体事件),我们不得不去面对非模态对话框。其实了解了资源管理的模式,就像扒开了非模态对话框半遮的琵琶,可以很坦然的面对了。
模态对话框的资源分成两种,一种是内存资源,一种是非内存资源。单看非内存资源的管理,其实和内存资源的管理原理是一样的。在C++中,内存资源的管理讲究new和delete配对,同理,非内存资源的管理需要create和destroy出双入对。在 这篇文章中,基本体现了非模态对话框资源管理的一个基本模式,即内存资源管理和非内存资源同步。
这样通过判断内存资源是否占用(即指针是否为空)就可以判断非内存资源的使用状况。当指针为空,说明对话框还未创建(非内存资源未申请);当指针不为空,对话框已创建,正处于可见或不可见状态。这样将两部分资源管理合并在一起了,只需要判断指针是否为空就可以了解对话框资源的状态。一些内存管理的手段,比如类管理思想(将delete和destroy放到类的析构函数中),可以实现资源的自动管理。
为了实现这种管理模式,要注意以下几点:
1. 在堆上分配非模态对话框的内存资源,通俗一点的描述就是不要用这种方式:CXXDialog t;而是用这种方式:CXXDialog *t = new CXXDialog();来分配内存。
2. 同步构造和析构过程,就是说有new一定配上个create,delete一定要勾搭一个destroy。
3. 被delete的内存指针一定要置空,也就是下面两句要接踵而至:delete xx;和xx == null;。其实这也是普通的内存管理需要遵循的一个良好习惯。
了解了这些,非模态对话框也会只有温柔没有狰狞。









本文转自 duguguiyu 51CTO博客,原文链接:http://blog.51cto.com/duguguiyu/362890,如需转载请自行联系原作者
目录
相关文章
|
弹性计算 JSON 数据可视化
Grafana 10 新特性解读,体验与协作全面提升
Grafana 10 新特性解读:体验与协作全面提升
32737 125
|
数据可视化 数据挖掘 BI
QuickBI全新高亮联动功能,引爆数据交互新体验!
本文介绍了高亮联动在BI系统中的应用,包括其定义、用途及实现方案。高亮联动通过用户在某个组件上的操作,自动在其他组件中高亮显示相关数据,帮助用户快速识别数据间的关联性。文中详细解释了筛选联动与高亮联动的区别,并展示了具体的实现步骤和图表结构。通过技术创新和用户体验优化,高亮联动功能将为用户提供更高效、直观的数据分析工具。
641 0
|
5G
MFC编程 -- 浮点数与字符串之间转换
MFC编程 -- 浮点数与字符串之间转换
329 1
|
C++
CxImage内存方式转换图像
最近,处于项目需要,需要将Bmp转换为JPEG格式。以前做过,采用的是GDI+的方式,该方式有一个极大地缺陷为无法实现跨平台处理。闲话少说,进入正题。 [cpp] view plain copy   CxImage cxImageBmp(pRGBBuffer, dwRGBSize, CXIMAGE_FORMAT_BMP);      cxImageBmp.Save("D:\\ttt.jpg",CXIMAGE_FORMAT_JPG);   该方式很正常,顺利将RGB格式24位BMP图像转化为本地JPG文件并保存下来。
1362 0
|
canal 关系型数据库 MySQL
Canal需要执行 `show master status` 命令来获取主库的binlog文件名和位置
Canal需要执行 `show master status` 命令来获取主库的binlog文件名和位置
1058 1
[MFC] A对话框调用B对话框
[MFC] A对话框调用B对话框
179 0
|
存储 C++
[MFC] 编辑框数据的存储和读取.TEXT
[MFC] 编辑框数据的存储和读取.TEXT
186 0
12 MFC - 非模态对话框
12 MFC - 非模态对话框
220 0
|
存储 运维 Kubernetes
如何是codis存储成本降低90%?使用Pika替代codis-server试试!
本文为大家分享个推如何完美结合Pika和Codis,最终节省90%大数据存储成本的实战经验。
562 0
如何是codis存储成本降低90%?使用Pika替代codis-server试试!
|
C++
MFC模态和非模态对话框编程
MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box)。  一、模态对话框(model dialog box)         在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送。
1490 0