MFC模态对话框和非模态对话框

MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box)。

 一、模态对话框(model dialog box)

        在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送。

       点击模态对话框中的OK按钮,模态对话框会被销毁。

        创建一个模态对话框的代码:

[cpp] view plaincopy
  1. //创建一个模态对话框  
  2. CTestDialog td;  
  3. td.DoModal();   

        其中CTestDialog为我自己所新建和一个对话框资源相关联的对话框类。

        可以创建一个布局模态对话框类变量,不用担心它会随着所在函数返回而被销毁。因为DoModal()函数的一个功能是,当前只能运行此模态对话框,且停止主窗口的运行,直到模态对话框退出,才允许主窗口运行。

        DoModal()函数也有显示对话框的功能,所以也无需调用其他函数来显示对话框。

二、非模态对话框(modaless dialog box)

        在程序运行的过程中,若出现了非模态对话框,主窗口还可以发送消息。

        点击非模态对话框中的OK按钮,非模态对话框没有销毁,只是隐藏了。若想点击OK按钮时,非模态对话框也销毁,那么CTestDialog类必须重载其基类CDialog的虚函数OnOK(),在此函数里调用DestroyWindow()来销毁此对话框。

        若和上面一样的方式创建一个非模态对话框:

[cpp] view plaincopy
  1.           CTestDialog td;  
  2. td.Create(IDD_DIALOG1); //创建一个非模态对话框  
  3. td.ShowWindow(SW_SHOWNORMAL); //显示非模态对话框  

        那么,在运行时,你会发现此对话框无法显示。这是因为你声明的对话框变量td是局部变量,但这个函数返回时,td也被析构了,所以无法显示此对话框。

        创建非模态对话框,必须声明一个指向CTestDialog类的指针变量,且需要显示的调用ShowWindow()才能将对话框显示出来。有两种创建方法:

(1)采用局部变量创建一个非模态对话框

[cpp] view plaincopy
  1. //采用局部变量创建一个非模态对话框  
  2. CTestDialog *pTD = new CTestDialog();  
  3. pTD->Create(IDD_DIALOG1); //创建一个非模态对话框  
  4. pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框  

       因为指针在声明的时候是被放在堆栈中,只有整个应用程序关闭后才会被销毁,所以可以正常显示对话框。

        这种方法虽然不影响程序的运行,可是指针pTD所指向的内存却导致不可用,这样的编程很不好。

(2)采用成员变量创建一个非模态对话框

        首先在你所要编写的类的头文件中声明一个指针变量:

[cpp] view plaincopy
  1. private:  
  2.     CTestDialog *pTD;  

        然后再在相应的CPP文件,在你要创建对话框的位置添加如下代码:

[cpp] view plaincopy
  1. //采用成员变量创建一个非模态对话框  
  2. pTD = new CTestDialog(); //给指针分配内存  
  3. pTD->Create(IDD_DIALOG1); //创建一个非模态对话框  
  4. pTD->ShowWindow(SW_SHOWNORMAL); //显示非模态对话框  

        最后在所在类的析构函数中收回pTD所指向的内存:

[cpp] view plaincopy
  1. delete pTD;  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

平板电脑离寿终正寝还有多远?

近期有评论称,因为大尺寸智能手机越来越普及,小尺寸平板正遭受着越来越严重的冲击,在这样的背景下,平板厂商也纷纷转攻超大尺寸平板市场,以此避开大尺寸智能手机的竞争,只是。这样的策略转变是否能扭转平板…

Swift 与 JSON 数据

转载自: http://www.cnblogs.com/theswiftworld/p/4660177.html 我们大家平时在开发 App 的时候,相信接触最多的就是 JSON 数据了。只要你的 App 有读取网络数据的功能,你就免不了要与 JSON 打交道。比如你做一个新闻 App,你要读取…

TeamViewer - 最好用强大的免费跨平台远程桌面控制软件 (支持电脑和手机)

from:很早以前 LYcHEE 就提到过,家中的潮人爷爷奶奶每天摆弄着电脑,看看新闻发发邮件,安享晚年生活。只是意料之中的,电脑上莫名出现各种问题?不翼而飞的图标?照片又忘记怎么导出了?…

【设计模式】7、桥接模式

桥接模式就是对一个类的方法进行抽象化,吧不相关的因素提取出来,发展出第二个类 1 package com.shejimoshi.structural.Bridge;2 3 4 /**5 * 功能:桥接模式使用6 * 意图:将抽象部分与它的实现部分分离,使他们都…

hadoop HA 之 QJM

前言 本文主要通过对hadoop2.2.0集群配置的过程加以梳理,所有的步骤都是通过自己实际测试。文档的结构也是根据自己的实际情况而定,同时也会加入自己在实际过程遇到的问题。搭建环境过程不重要,重要点在于搭建过程中遇到的问题,解…

TeamViewer免费版和付费版有什么不同

提到远程控制软件 TeamViewer无疑是目前业内知名度比较高的一款,所以说到远程控制软件可能大部分人首先想到的就是TeamViewer。在使用功能上,它支持远程桌面控制、文件传输、远程计算机锁定、视频会话、主控方和被控方身份互换,远程管理无人执…

iOS-关于cell的重叠问题

记得很早之前遇到过一个问题,关于cell的重叠问题,现在回顾总结一下。 iOS中tableview的cell显示是会消耗内存的,如果要显示无数个cell,不可能把每个cell都存储下来,为了解决这个问题,cell就用了重用机制&am…

每天一个Linux命令-ls

ls 命令在linux系统中是使用频率最频繁的几个命令之一,直接使用不带目录名,是默认显示当前目录的文件及子目录名称,ls加指定目录名,则可以查看指定目录下的文件及子目录名称,ls不仅可以查看目录下有哪些文件和子目录,还…

halcon资料链接

本文转载自xiamentingtao,原文地址如下: http://blog.csdn.net/xiamentingtao/article/details/52583787 1目录(?)[]论坛培训博客文档书籍视频论坛、培训halcon学习网:http://www.ihalcon.com/鸟叔机器视觉:http://bbs.szvbt.com…

【代码笔记】iOS-翻书效果的实现

代码: RootViewController.m #import "RootViewController.h"interface RootViewController ()endimplementation RootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self [super initWithNibName:…

修改TFS与本地源代码映射路径

使用源代码管理资源管理器修改工作区 在“文件”菜单上单击“源代码管理”,再单击“工作区”。 在“管理工作区”对话框的“名称”列下,突出显示要修改的工作区,然后单击“编辑”。 在“编辑工作区”对话框中: 修改“名称”框中…

halcon基础知识

一、程序中的颜色: 绿色:注释 褐色:控制开发 浅蓝色:外部函数——HDevelop函数文件,可在所有Halcon程序中使用 深蓝色:图像获取和处理 紫色:内部函数——本地程序函数,只在当前程序使…

停止过度设计,开发客户需要的软件

在与许多不同的团队合作过之后,Greg Young发现大家做项目时经常会大幅度的过度设计。比如一个预计要开发9个月的项目,换个角度思考一下,却可能只需要几个星期就可以提交95%的功能。Young在最近伦敦举行的DDD eXchange大会上着重阐述了这一点。…

Halcon—Tuple中符号的含义

2014年08月08日 21:20:30阅读数:5429实例一(3d_coordinates.hdev):for I : 1 to NumImages by 1read_image (Image, calib/calib-3d-coord-I$02d)——C:\Program Files\MVTec\HALCON-10.0\images\的calib文件夹中开头是calib-3d-c…

如果我是博客园的产品经理【上】

题记 这是一个系列文章的第一篇 我打算写一个《如果我是XXX的产品经理》系列, 因为我是博客园的老用户了,这个系列又是写在博客园上的 所以先拿博客园开刀, 后面估计还会写QQ音乐,有道云笔记,github,foxmai…

Halcon学习笔记(三)---数据类型

Halcon学习笔记(三)---数据类型halcon只能在单独行进行注释,不能在语句后面进行注释。1、tuple(元组,重数)赋值符号“:”tuple算子:(1)变量定义与加减乘除运算代码如下:*…

论文笔记之:RATM: RECURRENT ATTENTIVE TRACKING MODEL

RATM: RECURRENT ATTENTIVE TRACKING MODEL ICLR 2016 本文主要内容是 结合 RNN 和 attention model 用来做目标跟踪。 其中模型的组成主要是: 1. an attention model 主要用来从输入图像中提取 patch; 2. RNN 用来预测 attention 参数,即&am…

【分享】WeX5的正确打开方式(5)——绑定机制

今天继续WeX5的绑定机制。 需求分析 记账本要实现的效果就是可以展示所有账单,还能实时动态编辑每一笔账单,官方案例的效果图如下: 展示页: 编辑页 个人觉得官方案例加入了许多元素,不熟悉的同学每一个点都很难理解&am…

HALCON常用算子(HALCON13.0)

HALCON常用算子(HALCON13.0)Chapter 9--Developdev_clear_window ( : : : )功能:清除活动图形窗口的内容dev_close_window ( : : : )功能:关闭活动图形窗口。dev_display ( Object : : : )功能:在现有图形窗口中显示图…

关于未捕获异常的处理(WPF)

转载自:http://www.cnblogs.com/chenxizhang/p/3280947.html 这一篇文章来谈谈对于WPF应用程序开发中的未捕获异常的处理。 首先,我们当然是要求应用程序开发人员,尽可能地在程序可能出现异常的地方都去捕捉异常,使用try…catch的…