非模态对话框比模态对话框更难使用这是众所周知的,这是由于模态对话框运行时,阻塞了其父窗口的消息循环,使其能自成一派,所以能够怡然自得。但非模态对话框只相当于一个由父窗体创建的一个同级的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;。其实这也是普通的内存管理需要遵循的一个良好习惯。
了解了这些,非模态对话框也会只有温柔没有狰狞。

转载于:https://blog.51cto.com/duguguiyu/362890

MFC的非模态对话框资源管理相关推荐

  1. mfc 子窗体 按钮不触发_实战经验:MFC非模态对话框的使用

    问题 在MFC编程中,我们经常会使用到模态对话框,模态对话框的一个典型特征是当对话框弹出后,其父窗口将不接受任何UI响应,直到关闭当前的模态对话框后才能继续.然而,非模态对话框就没有这个限制,今天我们 ...

  2. MFC中的模态对话框与非模态对话框

    模态对话框创建: MyDialog mydlg; mydlg.DoModal() 当前只能运行此模态对话框,且停止主窗口的运行,直到模态对话框退出,才允许主窗口运行. 模态对话框的关闭顺序: OnCl ...

  3. MFC创建模态对话框和非模态对话框的方法

    在MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box).本文对此分别简述其创建方法. 一.模态对话框(model ...

  4. MFC非模态对话框实例

    [转载]MFC非模态对话框实例 2012-06-17 16:21:41|  分类: C++/MFC |  标签: |字号大中小 订阅 实例目的 在Windows环境中,对话框是一种常用的输入输出手段. ...

  5. MFC中模态对话框和非模态对话框的差别

    在MFC中有模态对话框和非模态对话框,那这两种有什么差别呢. 又都是用于什么场合呢. 首先,要弄清楚2种对话框是怎样创建的. 然后要弄清楚2种对话框有什么差别,可能从表面上看,模态会堵塞主对话框.可原 ...

  6. 关于MFC下多线程,在线程中创建非模态对话框以及消息传递

    2019独角兽企业重金招聘Python工程师标准>>> 关于MFC下多线程,在线程中创建非模态对话框以及消息传递 问题: 1.在子对话框中它的子对话框需要实现脱离父对话框的束缚.(因 ...

  7. MFC实现弹出模态对话框和非模态对话框(基于对话框)

    模态对话框:当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互.(比如:word中的"另存为") 非模 ...

  8. MFC创建模态对话框与非模态对话框 执行顺序

    创建模态对话框 CDialog::DoModal virtual int DoModal(); 返回值: 整数值,指定了传递给CDialog::EndDialog 的nResult参数值.该函数用于关 ...

  9. C++ MFC深入详解之----模态对话框与非模态对话框

    对话框的种类 有两种类型的对话框:模态( Modal)对话框和非模态( Modeless)对话框 模态对话框 模态对话框是指当其显示时,程序会暂停执行,直到关闭这个模态对话框后,才能继续执行程序中其他 ...

最新文章

  1. ASP.NET MVC动作过滤器
  2. Python高阶函数用法
  3. ubuntu tail、history|grep 、alias命令
  4. How is JerryMaster.view.xml being loaded in WebIDE local test environment
  5. CoreJava 笔记总结-第四章 对象与类
  6. HDU 2577 How to Type
  7. Selenium之前世今生
  8. java 8-8 接口的练习
  9. 股票历史数据-股票历史数据下载
  10. PS、PR素材资源网站
  11. 软件测试概述基本介绍
  12. GoLang之什么是CSP(1)
  13. 前端开发中遇到常见问题总结
  14. 5G知识之0G-5G的技术发展
  15. 【AVL树】AVL树的插入操作以及旋转
  16. 金融壹账通企业金融CEO费轶明:金融服务业进入以技术为动力的时代
  17. ES6-ES11新特性速查手册
  18. CCF 201709-2 公共钥匙盒 (Java 100分)
  19. Node* create()的含义
  20. 【机器学习】逻辑回归之心脏病预测

热门文章

  1. OAuth2.0_JWT令牌介绍_Spring Security OAuth2.0认证授权---springcloud工作笔记147
  2. SpringCloud学习笔记018---SpringBoot前后端分离_集成_SpringSecurity_简单实现
  3. 超棒的一遍综述性博客
  4. android开发之android:padding和android:margin的区别
  5. editor修改样式 vue_VUE 项目如何快速优化?
  6. 随想录(搭建自己嵌入式项目的编译系统)
  7. python编程(基于订阅模式的mvc实现)
  8. 一步一步写算法(之哈希二叉树)
  9. 一步一步写算法(之排序二叉树的保存和加载)
  10. python 文件名随自变量变化_Python 求解自行车前后轮轨迹问题