一、根据主窗口类型,MFC软件工程可以分为以下几种架构模型:

1、SDI(Single Document Interface):单文档界面,一个主框架窗口下只能编辑一份文档。

例如:记事本和画笔等。
2、MDI(Multiple Document Interface):多文档界面,一个主框架窗口下可以同时编辑多份文档。
例如:VC++6.0,Photoshop等软件。
3、基于对话框的软件模型:主窗口是通过资源管理器,在对话框模板内摆放控件编辑而成的。
多数用于开发小规模软件,例如:任务管理器。
4、其他自定义窗口做主窗口:主窗口既不是框架也不是对话框,而是直接开发通用窗口类CWnd而成。
例如:输入法窗口、QQ和360软件等,有时这类软件也都可以使用框架或对话框模式来代替开发而成。

对话框主要分为两个类型:模式对话框和非模式对话框。当模式对话框弹出后,无法操作它的父窗口或者上一级窗口,直到关闭该对话框为止。例如:大部分软件的“关于…”对话框,都是属于模式对话框。当非模式对话框弹出后,不影响对它的父窗口或者上一级窗口的操作。例如:QQ的聊天框或者编辑软件中的文字查找对话框等等。
1、模式对话框的特点是:
a)在关闭模式对话框前,无法操作背景窗口,除非自身就是主窗口;
b)使用CDialog::DoModal函数弹出模式对话框,该函数执行过程是阻塞函数; 
c)因此在栈内或者堆内申请对话框类的对象都可以的,申请栈内变量开发和运行效率高一些。
2、非模式对话框的特点是:
a)在非模式对话框运行时可以操作背景窗口;

b)使用CDialog::Create函数和CWnd::ShowWindow弹出模式对话框,该函数执行过程是非阻塞函数;

c)不能在栈内或者堆内申请对话框类的临时对象,需要申请堆内变量或者使用全局变量、成员变量等生命期较长的对象。

类结构图:

模式对话框效果图:

非模式对话框效果图:

我在主对话框上面设置了两个button,分别弹出模式对话框和非模式对话框。

代码实现:

void CMFCDlg::OnButton1() 
{
    //模式对话框:在栈内生成一个临时变量,阻塞型对话框。DoModal产生的对话框,不能操作对话框后面的对话框
    CAboutDlg dlg;
    dlg.DoModal();
}
 
void CMFCDlg::OnButton2() 
{
    //非模式对话框:必须在堆内申请对象、或者在成员变量内申请对象
    CChatDlg* pDlg = new CChatDlg;
    //pDlg->Create(IDD_CHAT_DLG);//父窗口是m_pMainWnd所指定的对象
    pDlg->Create(IDD_CHAT_DLG, GetDesktopWindow());//不依赖与其他窗口,独立的窗口
    pDlg->ShowWindow(SW_SHOW);
}

原文:https://blog.csdn.net/huanhuanxiaoxiao/article/details/80905198

MFC—对话框程序—模式对话框与非模式对话框相关推荐

  1. 【MFC系列-第10天】非模式对话框开发

    10.1 程序左上角图标设置 通过SendMessage发送WM_SETICON消息来设置 10.2 纯Win32程序开发和技巧(借助MFC源码) 10.3 非模式对话框的调用 a)调用CDialog ...

  2. windows对话框窗口DialogBox模式对话框、EndDialog、CreateDialog非模式对话框、DestroyWindow、WM_INITDIALOG

    普通窗口:自定义函数调用缺省函数 wndProc(-) { - DefWindowProc(-); } 对话框窗口:缺省函数 调用自定义函数 缺省函数(-){ - 自定义函数(-) - } 对话框原理 ...

  3. qt文件选择对话框 linux,Linux下QT实现自定义对话框以及设置模态和非模态对话框...

    最近使用QT做毕业设计,其中用到了对话框,但系统默认的对话框不能满足我的需求,于是决定自己来封装一个,这需要根据QT提供的QDialog基类来建立,以下附上头文件及实现文件,已测试通过. #ifnde ...

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

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

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

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

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

    MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box).二者的区别在于当对话框打开时,是否允许用户进行其他对象的操 ...

  7. MFC应用模态对话框和非模态对话框

    关于对话框呢 第一个了解的就是模态对话框和非模态对话框 定义的话: 1.模态对话框工作状态:当它获得焦点时,将垄断用户的输入,在完成本对话框之前,用户无法对本程序的其他部分进行操作. 2.非模态对话框 ...

  8. 【MFC系列-第12天】Windows系统对话框

    12.1 INI配置文件 UINT GetProfileInt( LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault ); 从应用程序的配置文件( ...

  9. CreateDialog和DialogBox的区别,模态对话框与非模态对话框

    INT_PTR DialogBox(          HINSTANCE hInstance,     LPCTSTR lpTemplate,     HWND hWndParent,     DL ...

  10. 【VS开发】模态对话框和非模态对话框

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

最新文章

  1. Python——Entry、Text控件
  2. 百度推出自动驾驶系统Apollo2.0, 距商业化“更近一步”!
  3. golang 不定参 可变参 使用 传递
  4. 前端学习(2477):封装数据接口
  5. 我的笔记本的鼠标又乱跑了!寻求帮助!
  6. 8,hibernate的集合
  7. k-d tree算法原理及实现
  8. zabbix3.2通过snmp v2采集Dell服务器iDRAC口信息监控硬件
  9. UGUI实现摇杆(模仿太极熊猫)
  10. 音频插件使用(wavesurfer.js)
  11. 汉字Unicode编码表
  12. ios 更多 Url Schemes
  13. 计算材料学与第一性原理、分子动力学、蒙特卡洛计算方法
  14. 分享一下我在东方时尚学车的经历
  15. C语言 判断某一日期是星期几
  16. 17. Zigbee应用程序框架开发指南 - 使用Ember AppBuilder设计应用程序
  17. GMT,UTC,CST,ISO等时间标志以及时区的总结
  18. 用css做一个梦幻西游动画特效
  19. 计算机屏幕的显示分辨率与什么有关,事实:显示器屏幕尺寸和分辨率之间是什么关系?...
  20. CNCF宣布TUF项目正式毕业

热门文章

  1. php打印模板插件,smarty的插件功能是smarty模板的精华
  2. Java中sum和Sum相同吗,Java认为变量Sum 和sum相同。
  3. 虚拟机架云服务器,云服务器 虚拟机架设
  4. 画瀑布图_道砟石上的庐山瀑布惟妙惟肖
  5. 2020年7月编程语言排行榜
  6. oracle类型不匹配,sys_refcursor的使用,报错类型不匹配
  7. HDLBits答案(13)_Verilog移位寄存器附加题
  8. nginx 域名配置_nginx 一个域名配置多个vue项目
  9. pdf导入ps颜色太浅_PDF 文件编辑转换难?或许你需要一个扫描全能王!
  10. 电脑上有一个程序一直在按向上_HUAWEI Matebook 九个超牛电脑快捷键