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,如需转载请自行联系原作者
目录
相关文章
|
7月前
10 MFC - 对话框应用程序框架介绍
10 MFC - 对话框应用程序框架介绍
56 0
|
7月前
|
存储 C++
07 MFC - 用向导生成一个MFC应用程序
07 MFC - 用向导生成一个MFC应用程序
34 0
|
7月前
|
C++ Windows
09 MFC - 创建基于对话框的 MFC 应用程序框架
09 MFC - 创建基于对话框的 MFC 应用程序框架
47 0
|
18天前
MFC应用程序对话框架构
MFC应用程序对话框架构
17 0
|
18天前
MFC对话框构架程序
MFC对话框构架程序
17 0
|
18天前
MFC应用程序单文档及类向导的使用
MFC应用程序单文档及类向导的使用
26 0
|
18天前
MFC单文档视图架构
MFC单文档视图架构
19 0
|
自然语言处理 C++
MFC基于对话框使用dll进行多语言切换
Qt使用qm文件切换有两种加载方式,比较容易一些
441 0
MFC基于对话框使用dll进行多语言切换

热门文章

最新文章