MFC—对话框程序—模式对话框与非模式对话框
一、根据主窗口类型,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—对话框程序—模式对话框与非模式对话框相关推荐
- 【MFC系列-第10天】非模式对话框开发
10.1 程序左上角图标设置 通过SendMessage发送WM_SETICON消息来设置 10.2 纯Win32程序开发和技巧(借助MFC源码) 10.3 非模式对话框的调用 a)调用CDialog ...
- windows对话框窗口DialogBox模式对话框、EndDialog、CreateDialog非模式对话框、DestroyWindow、WM_INITDIALOG
普通窗口:自定义函数调用缺省函数 wndProc(-) { - DefWindowProc(-); } 对话框窗口:缺省函数 调用自定义函数 缺省函数(-){ - 自定义函数(-) - } 对话框原理 ...
- qt文件选择对话框 linux,Linux下QT实现自定义对话框以及设置模态和非模态对话框...
最近使用QT做毕业设计,其中用到了对话框,但系统默认的对话框不能满足我的需求,于是决定自己来封装一个,这需要根据QT提供的QDialog基类来建立,以下附上头文件及实现文件,已测试通过. #ifnde ...
- MFC创建模态对话框和非模态对话框的方法
在MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box).本文对此分别简述其创建方法. 一.模态对话框(model ...
- 关于MFC下多线程,在线程中创建非模态对话框以及消息传递
2019独角兽企业重金招聘Python工程师标准>>> 关于MFC下多线程,在线程中创建非模态对话框以及消息传递 问题: 1.在子对话框中它的子对话框需要实现脱离父对话框的束缚.(因 ...
- MFC中模态对话框和非模态对话框的区别
MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box).二者的区别在于当对话框打开时,是否允许用户进行其他对象的操 ...
- MFC应用模态对话框和非模态对话框
关于对话框呢 第一个了解的就是模态对话框和非模态对话框 定义的话: 1.模态对话框工作状态:当它获得焦点时,将垄断用户的输入,在完成本对话框之前,用户无法对本程序的其他部分进行操作. 2.非模态对话框 ...
- 【MFC系列-第12天】Windows系统对话框
12.1 INI配置文件 UINT GetProfileInt( LPCTSTR lpszSection, LPCTSTR lpszEntry, int nDefault ); 从应用程序的配置文件( ...
- CreateDialog和DialogBox的区别,模态对话框与非模态对话框
INT_PTR DialogBox( HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent, DL ...
- 【VS开发】模态对话框和非模态对话框
MFC中对话框有两种形式,一个是模态对话框(model dialog box),一个是非模态对话框(modeless dialog box). 一.模态对话框(model dialog box) 在程 ...
最新文章
- Python——Entry、Text控件
- 百度推出自动驾驶系统Apollo2.0, 距商业化“更近一步”!
- golang 不定参 可变参 使用 传递
- 前端学习(2477):封装数据接口
- 我的笔记本的鼠标又乱跑了!寻求帮助!
- 8,hibernate的集合
- k-d tree算法原理及实现
- zabbix3.2通过snmp v2采集Dell服务器iDRAC口信息监控硬件
- UGUI实现摇杆(模仿太极熊猫)
- 音频插件使用(wavesurfer.js)
- 汉字Unicode编码表
- ios 更多 Url Schemes
- 计算材料学与第一性原理、分子动力学、蒙特卡洛计算方法
- 分享一下我在东方时尚学车的经历
- C语言 判断某一日期是星期几
- 17.	Zigbee应用程序框架开发指南 - 使用Ember AppBuilder设计应用程序
- GMT,UTC,CST,ISO等时间标志以及时区的总结
- 用css做一个梦幻西游动画特效
- 计算机屏幕的显示分辨率与什么有关,事实:显示器屏幕尺寸和分辨率之间是什么关系?...
- CNCF宣布TUF项目正式毕业
热门文章
- php打印模板插件,smarty的插件功能是smarty模板的精华
- Java中sum和Sum相同吗,Java认为变量Sum 和sum相同。
- 虚拟机架云服务器,云服务器 虚拟机架设
- 画瀑布图_道砟石上的庐山瀑布惟妙惟肖
- 2020年7月编程语言排行榜
- oracle类型不匹配,sys_refcursor的使用,报错类型不匹配
- HDLBits答案(13)_Verilog移位寄存器附加题
- nginx 域名配置_nginx 一个域名配置多个vue项目
- pdf导入ps颜色太浅_PDF 文件编辑转换难?或许你需要一个扫描全能王!
- 电脑上有一个程序一直在按向上_HUAWEI Matebook 九个超牛电脑快捷键