[MFC]模态与非模态对话框

转载 2018年04月17日 17:22:57

1.简述

1.1模态对话框(model dialog box)

当模态对话框显示时,程序会暂停执行,直到关闭这个模态对话框之后,才能执行程序中的其他任务。

1.2非模态对话框(modeless dialog box)

当非模态对话框显示时,运行转而执行程序中的其他任务,而不用关闭这个对话框。

2.代码

2.1模态对话框的实现

void CModelCtrDlg::OnBnClickedButton1()
{
    // TODO: 在此添加控件通知处理程序代码
    TestDialog1 dlg;
    dlg.DoModal();
}
    TestDialog1是我创建的一个对话框相关的对话框类。

    CDialog::DoModel:该函数的功能就是创建并显示一个模态对话框。

2.2非模态对话框实现

void CModelCtrDlg::OnBnClickedButton2()
{
    // TODO: 在此添加控件通知处理程序代码
    TestDialog2 *dlg = new TestDialog2;
    dlg->Create(IDD_DIALOG2);//创建一个非模态对话框    IDD_DIALOG2是我创建的一对话框ID
    dlg->ShowWindow(SW_SHOWNORMAL);//显示非模态对话框
}
    

上面程序因为dlg指针变量是在堆上存储的, 且只有程序结束才能释放, 如果要手动释放的话要增加额外的代码,因此这种写法不太合适。

2.2.1改进代码

首先在主对话框创建一个TestDialog2类型成员指针变量:

private:
    TestDialog2 *dlg;

再在相应的function加上以下代码: 

    dlg = new TestDialog2;
    dlg->Create(IDD_DIALOG2);//创建一个非模态对话框    IDD_DIALOG2是我创建的一对话框ID
    dlg->ShowWindow(SW_SHOWNORMAL);//显示非模态对话框

 
最后在主对话框类析构函数中加入


delete dlg;

MFC入门应用

MFC是微软的基本类库,对很多东西已经进行了封装,因此使用起来简单、方便。MFC作为微软开源的一项技术,是很值得很多同学去学习的,了解MFC,走进window底层核心,发觉window本质,才能有助于同学们的提高。
  • 2017年04月14日 17:50

MFC 非模态对话框

 非模态对话框 用MFC可以创建非模态的对话框,只是创建方式不同,模态对话框用 dlg.DoModel()调用,而非模态对话框要用...
  • bitxinhai
  • bitxinhai
  • 2008-04-20 21:32:00
  • 12571

<MFC>模态对话框和非模态对话框的创建弹出

一、模态对话框的创建及显示 1、Windows对话框分为两类:模态对话框和非模态对话框。     模态对话框:当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进...
  • xieziwei2008
  • xieziwei2008
  • 2013-10-16 16:10:16
  • 1719

MFC非模态对话框和模态对话框销毁的方法

  • liuyi1207164339
  • liuyi1207164339
  • 2015-06-29 14:30:42
  • 1453

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

对话框主要分为两个类型:模式对话框和非模式对话框。 1、模式对话框的特点是: a)在关闭模式对话框前,无法操作背景窗口,除非自身就是主窗口; b)使用CDialog::DoModal函数弹出模式...
  • djb100316878
  • djb100316878
  • 2014-12-30 16:40:12
  • 2151

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

我们需要在原对话框CMFC_Kinect_TrackingDlg设计一个按钮,点击这个按钮后弹出一个非模态对话框Color_Based_SettingDlg, 并且同时两个对话框都是激活状态,都可以...
  • denyz
  • denyz
  • 2016-03-05 11:05:41
  • 1091

VC模态和非模态对话框关闭过程

非模态对话框相对于模态对话框,他的创建和销毁过程和模态对话框有一定的区别 先看一下 MSDN 的原文:When you implement a modeless dialog box, always ...
  • wanggao_1990
  • wanggao_1990
  • 2016-02-28 09:39:08
  • 2016

MFC 创建非模态对话框和销毁过程

今天项目中遇到的问题,记录下来,做个总结。 一个简单的目的是创建一个非模态对话框并在对话框关闭后将其销毁。 这里的销毁包括:销毁对话框对象资源和对话框对象指针; 首先说创建对话框: 一、模态对话框(m...
  • xiaominggunchuqu
  • xiaominggunchuqu
  • 2015-11-17 23:29:00
  • 6802

MFC调用对话框dll弹出非模态对话框

思路: 1、新建基于MFC的DLL,在DLL中做一个导出函数,在该导出函数中new出对话框类,导致函数返回CWnd*也就是new出来的窗口实例指针。如下 CWnd *  InitData( CW...
  • q357010621
  • q357010621
  • 2016-03-01 00:01:40
  • 853

关于模态对话框和非模态对话框的创建、显示,以及和父对话框的传值

当然网上关于这方面的技术博文非常多,此处我只是进行一下小记,再加一点自己的体会,方便以后查询。一、模态对话框 1.创建及显示 模态对话框是一种阻塞式的对话框,即没有处理完该对话框,不能对其他地方进...
  • u013051748
  • u013051748
  • 2015-04-27 09:29:40
  • 1259
收藏助手
不良信息举报
您举报文章:[MFC]模态与非模态对话框
举报原因:
原因补充:

(最多只允许输入30个字)