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

因为课程需要,会用到MFC编程,所以讲一些经验总结下,以便日后使用查询。

// 非模态对话框的定义

// 通过单文档菜单调用一个非模态窗口

1、首先在工程里插入一个对话框(如:IDD_DLG_TEST),再添加对应的类(如:CdlgTest);

2、在类向导里添加"WM_DESTROY"消息响应函数“OnDestroy()”,并进行重载,用于关闭对话框时销毁对象。

void CdlgTest::OnDestroy() 
{
    CDialog::OnDestroy();
    
    // TODO: Add your message handler code here
    delete this;
}

3、在视图类CxxxView中定义该对话框对象指针,注意包含头文件

CdlgTest *dlgTest;

接着再视图类的构造函数里对改对话框指针进行初始化

dlgTest = NULL;

4、在菜单响应函数里添加如下代码,即可在点击菜单后弹出对话框

if (NULL == dlgTest)

{

dlgTest= new CdlgTest;
    dlgTest->Create(IDD_DLG_TEST, this);
}

linearDlg->ShowWindow(SW_SHOW); // 显示窗口

时间: 2024-10-26 14:03:01

MFC编程 | 非模态对话框的定义的相关文章

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

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

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模态对话框与非模态对话框的区别总结

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

MFC 非模态对话框

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

mfc非模态对话框

按照我们的之前的做法,先新建工程. 把基本的内容都添加上. 形成这样一个样子: 并且进行试运行,让程序能够完成加法运算. 值的注意的是,静态文本那里要改一下名字,否则无法将成员变量进行添加. 前期准备: 然后就可以开始做我们的非模态对话框了. 一.创建这样一个对话框 到资源视图下面的,找到Dialog右击,出现下拉菜单.点击插入Dialog. 这步,应该都很熟练,先拖动两个按钮(否则可能会发生问题),然后稍微调整对话框的大小,最后添加一个静态文本.输入一些文字. 二.右键当前对话框,然后找到添加

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

对话框主要分为两个类型:模式对话框和非模式对话框. 1.模式对话框的特点是: a)在关闭模式对话框前,无法操作背景窗口,除非自身就是主窗口: b)使用CDialog::DoModal函数弹出模式对话框,该函数执行过程是阻塞函数: c)因此在栈内或者堆内申请对话框类的对象都可以的,申请栈内变量开发和运行效率高一些. 2.非模式对话框的特点是: a)在非模式对话框运行时可以操作背景窗口: b)使用CDialog::Create函数和CWnd::ShowWindow弹出模式对话框,该函数执行过程是非阻