mfc非模态对话框

按照我们的之前的做法,先新建工程。

把基本的内容都添加上。

形成这样一个样子:

并且进行试运行,让程序能够完成加法运算。

值的注意的是,静态文本那里要改一下名字,否则无法将成员变量进行添加。

前期准备:

然后就可以开始做我们的非模态对话框了。

一、创建这样一个对话框

到资源视图下面的,找到Dialog右击,出现下拉菜单。点击插入Dialog。

这步,应该都很熟练,先拖动两个按钮(否则可能会发生问题),然后稍微调整对话框的大小,最后添加一个静态文本。输入一些文字。

二、右键当前对话框,然后找到添加类,这个下拉菜单选项。

这样起了一个名字:

C代表类名,immodel大概是非模的意思【笑哭】,dlg对话框。然后点击完成。

/*

这里就是前面说的有可能会出现问题,不过,这个无关紧要,保存之后,直接进行下一步就可以了。

*/

之前我们说,在按钮点下的时候,会触发非模态对话框弹出的事件。

我们应该如何操作呢?

逻辑:这段代码应该出现在按钮按下的位置,也就是我们曾经书写UpdateData();和c=a+b的地方。在进行计算之前,要弹出对话框。1、创建该类的对象,并显示。这就是算法了。在进行细化:1、创建之前要先询问一下,是不是有必要创建,有的话直接显示,没有在创建并显示。2、为了创建,应该要包含头文件。因为它不属于某个窗体,而是整个进程的。(注意:我们上次创建的模态窗口就只对应那个按钮,所以是局部的。但是我们这次创建的非模窗口是不应该随着响应结束而消亡的。所以他的声明是全局的。所以同时也需要在构造函数进行初始化,在结束时,需要析构)

具体:

1、在MFC非模态窗口Dlg.h 中添加两行代码:

#include “ImmodelDlg.h”

CImmodelDlg *m_pimmodelDlg;

2、去构造里面初始化他。

下面留了一段儿紫色的BEGIN_MESSAGE_MAP可能会比较好定位。

总之在构造函数中添加完。

3、就可以去界面显示了

需要在计算按钮里面添加如下代码:

if (m_pimmodelDlg == NULL){//判定对话框是否有所指向

m_pimmodelDlg = new CImmodelDlg();//指向一个非模对话框示例

m_pimmodelDlg->Create(IDD_DIALOG1, this);//创建

}

m_pimmodelDlg->ShowWindow(SW_SHOW);//显示

如图:

运行效果:

样子是有了,但是需要析构析构!!!

这很重要。

在这段代码的下面添加如下代码:

CMFC非模态窗口Dlg::~CMFC非模态窗口Dlg(){

if (m_pimmodelDlg != NULL){

delete m_pimmodelDlg;

m_pimmodelDlg = NULL;

}

}

如图:

如此非模态对话框的创建也完成了。

参考网站:

http://www.jizhuomi.com/school/c/161.html

时间: 2024-11-08 19:07:12

mfc非模态对话框的相关文章

MFC 非模态对话框

MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box). 一.模态对话框(model dialog box) 在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送. 点击模态对话框中的OK按钮,模态对话框会被销毁. 创建一个模态对话框的代码: [cpp] view plaincopy //创建一个模态对话框 CTestDialog td; td.DoModal(); 其

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

MFC的对话框非为两种,一种叫模态对话框(Modal  Dialog  Box,又叫做模式对话框),一种叫做非模式对话框(Modaless Dialog Box,又叫无模式对话框).两者的区别在于当对话框打开的时候,是否允许用户进行其他对象的操作. 一.模态对话框 模态对话框指,当用户需要对该对话框之外的其他对话框或者模块进行操作时,必须该对话框关闭,才能去编辑其他对话框或者模块. 创建如下: //创建模态对话框 CModalDialog modalDialog; modalDialog.DoM

MFC中模态对话框和非模态对话框的区别

在MFC中有模态对话框和非模态对话框,那这两种有什么区别呢.又都是用于什么场合呢. 首先,要弄清楚2种对话框是如何创建的. 然后要弄清楚2种对话框有什么区别,可能从表面上看,模态会阻塞主对话框,可原理是什么呢. 还有就是,当有模态和非模态对话框没有关闭的时候,在任务栏中,关闭主窗体,会有什么样的效果呢. 虽然,现在有很多优秀的开源库比如QT,DUI等,但是这些原理,我们还是要了解的,不能停留在用的层面.有人说MFC过时了,有人说,现在有很多开源库,知道怎么用就可以了.但是现在界面要的交互好,界面

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

模态对话框创建: MyDialog mydlg; mydlg.DoModal() 当前只能运行此模态对话框,且停止主窗口的运行,直到模态对话框退出,才允许主窗口运行. 模态对话框的关闭顺序: OnClose:按关闭符号X后,响应WM_CLOSE消息 OnKillFocus:窗口即将失去输入焦点,响应WM_KILLFOCUS消息 OnDestroy:窗口即将被销毁时,响应WM_DESTROY消息 OnNcDestroy:窗口被销毁或,响应WM_NCDESTROY消息 PostNcDestroy:由

【转】MFC模态对话框和非模态对话框

MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box). 一.模态对话框(model dialog box) 在程序运行的过程中,若出现了模态对话框,那么主窗口将无法发送消息,直到模态对话框退出才可以发送. 点击模态对话框中的OK按钮,模态对话框会被销毁. 创建一个模态对话框的代码: 1 //创建一个模态对话框 2 CTestDialog td; 3 td.DoModal(); 其中CTestDialog为我自

MFC编程 | 非模态对话框的定义

因为课程需要,会用到MFC编程,所以讲一些经验总结下,以便日后使用查询. // 非模态对话框的定义 // 通过单文档菜单调用一个非模态窗口 1.首先在工程里插入一个对话框(如:IDD_DLG_TEST),再添加对应的类(如:CdlgTest): 2.在类向导里添加"WM_DESTROY"消息响应函数“OnDestroy()”,并进行重载,用于关闭对话框时销毁对象. void CdlgTest::OnDestroy() {    CDialog::OnDestroy();        

MFC模态对话框与非模态对话框的区别总结

非模态与模态对话框最主要的区别是非模态对话框不垄断用户的输入,用户打开非模态对话框后,仍然可以与其它界面进行交互.但是打开模态对话框就必须关闭后才能进行在其它界面进行操作. 具体的区别有: 1.非模态对话框对象是用new操作符在堆中动态创建的,而不是以成员变量的形式嵌入到别的对象中或以局部变量的形式构建在栈上.通常应在对话框的拥有者窗口类内声明一个指向对话框类的指针成员变量,通过该指针可访问对话框对象. 2.非模态对话框是通过调用CDialog::Create函数来启动,而模态对话框是通过调用C

VS2010/MFC对话框:非模态对话框的创建及显示

非模态对话框的创建及显示 上一节讲了模态对话框及其弹出过程,本节接着讲另一种对话框--非模态对话框的创建及显示. 已经说过,非模态对话框显示后,程序其他窗口仍能正常运行,可以响应用户输入,还可以相互切换.鸡啄米会将上一讲中创建的Tip模态对话框改为非模态对话框,让大家看下效果. 非模态对话框的对话框资源和对话框类 实际上,模态对话框和非模态对话框在创建对话框资源和生成对话框类上是没有区别的,所以上一讲中创建的IDD_TIP_DIALOG对话框资源和CTipDlg类都不需要修改. 创建及显示非模态

MFC模态与非模态对话框

1.简述 1.1模态对话框(model dialog box) 当模态对话框显示时,程序会暂停执行,直到关闭这个模态对话框之后,才能执行程序中的其他任务. 1.2非模态对话框(modeless dialog box) 当非模态对话框显示时,运行转而执行程序中的其他任务,而不用关闭这个对话框. 2.代码 2.1模态对话框的实现 void CModelCtrDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 TestDialog1 dlg; dlg