VC++中模态对话框和非模态对话框的编程
第5章 对话框new

VC++应用程序编程
5.1.2 对话框的CDialog类 CDialog类从 CWnd类派生而来,所 以它继承了CWnd类的 成员函数,具有CWnd 类的基本功能,可以 编写代码移动、显示 或隐藏对话框,并能 根据对话框的特点增 加新的成员函数,扩 展它的功能。
CObject CCmdTarget CWnd CDialog
控件属性对话框
VC++应用程序编程
对话框的属性
VC++应用程序编程
3.测试对话框的运行效果
测试对话框的方法有下面3种: 选择菜单项Layout |Test。 单击布局工具栏上的Test按钮。
按快捷键Ctrl+T。
VC++应用程序编程
【例 5.1】 创建一个单文档的应用程序向应用程序中 添加如图所示的对话框模板资源,并设置控件的 Caption、ID属性。
VC++应用程序编程
DoDataExchange()函数由框架调用。在应用程序 MyDialog中,可以找到下列函数: void CTestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CTestDlg) DDX_Text(pDX, IDC_EDIT1, m_num1); DDV_MinMaxInt(pDX, m_num1, 0, 100); DDX_Text(pDX, IDC_EDIT2, m_num2); DDV_MinMaxInt(pDX, m_num2, 0, 100); DDX_Text(pDX, IDC_EDIT3, m_num3); //}}AFX_DATA_MAP } DDV函数调用语句,程序运行后,如果用户的
模态与非模态对话框的区别与操作

由于整体变量被初始化为0,所以hDlgModeless将为0,直到建立对话框为止,从而保证不会使用无效的窗口句柄来呼叫IsDialogMessage。在清除非模态对话框时,您也必须注意这一点,正如最后一点所说明的。
hDlgModeless变量也可以由程序的其它部分使用,以便对非模态对话框是否存在加以验证。例如,程序中的其它窗口可以在hDlgModeless不等于0时给对话框发送消息。
case WM_CLOSE : DestroyWindow (hDlg) ; hDlgModeless = NULL ; break ;
注意这两个窗口句柄之间的区别:DestroyWindow的hDlg参数是传递给对话框程序的参数;hDlgModeless是从CreateDialog传回的整体变量,程序在消息循环内检验它。
第三项区别:与模态对话框和消息框的消息不同,非模态对话框的消息要经过程序式的消息队列。要将这些消息传送给对话框窗口消息处理程序,则必须改变消息队列。方法如下:当您使用CreateDialog建立非模态对话框时,应该将从呼叫中传回的对话框句柄储存在一个整体变量(如hDlgModeless)中,并将消息循环改变为:
第二项重要的区别是:注意,在我们的范例STYLE叙述中包含有WS_VISIBLE样式。在Developer Studio中,从「Dialog Properties」对话框的「More Styles」页面卷标中选择此选项。如果省略了WS_VISIBLE,那么您必须在CreateDialog呼叫之后呼叫ShowWindow:
VC++ 课件 第05章 对话框和常用控件

5.2控件的创建和使用方法
5.2.1控件的创建方法 控件的创建方式有以下两种: 一种是在对话框模板中用编辑器指定控件,也就是说,将控件的父窗口指 定为对话框,这样做的好处是明显的,因为当应用程序启动该对话框时, Windows系统就会为对话框创建控件;而当对话框消失时,控件也随之清 除。 另一种方式是将控件看作是任一窗口的子窗口,并通过调用相应的Create 函数来创建。 [例Ex_SDIHello] 在上例Ex_SDIHello的基础上用子窗口方式创建控件。 (1)打开CMyDlg的头文件MyDlg.h,添加一个按钮类CButton指针变量: class CMyDlg : public CDialog { // Construction public: CMyDlg(CWnd* pParent = NULL); // standard constructor CButton *m_btnWnd; … }
5.1对话框的使用
在程序中使用对话框 (1)利用项目工作区的ClassView标签项,将Ex_SDIHello.cpp源文件打开; (2)在Ex_SDIHello.cpp源文件的前面加上包含类CMyDlg的头文件: #include "MyDlg.h" (3)在InitInstance函数体中的“return TRUE;”语句之前添加下列代码: CMyDlg dlg; dlg.DoModal(); DoModal是模态对话框最常用的函数,它负责对话框的显示和终止。 (4)编译并运行。在程序的一开始就出现用户自己设计的对话框,单击 [Button1]按钮将弹出“欢迎进入对话框的设计!”的消息对话框来。
5.1对话框的使用
5.1.2使用对话框编辑器
打开对话框编辑器
将项目工作区窗口切换到ResourceView页面,双击Dialog目录下任意一个对 话框ID。或者,选择“Insert”“Resource”菜单命令(或按快捷键Ctrl+R), 选择Dialog项,单击New。
VC非模态对话框创建和销毁 模态对话和非模态话框识别

0x0001 // window is enabled for tooltips 0x0002 // window is temporarily hidden 0x0004 // window should stay disabled 0x0008 // currently in modal loop 0x0010 // modal loop should continue running 0x0100 // some descendant is an OLE control 0x0400 // window is enabled for tracking tooltips
如果拥有该窗口的类是一个框架类则命令和通知消息也被传递到视图和文档类并为该类寻找一个消息处理函数mfc应用程序创建窗口的过程1precreatewindow该函数是一个重载函数在窗口被创建前可以在该重载函数中改变创建参数可以设置窗口风格等等2presubclasswindow这也是一个重载函数允许首先子分类一个窗口3ongetminmaxinfo该函数为消息响应函数响应的是wmgetminmaxinfo消息允许设置窗口的最大或者最小尺寸4onnccreate该函数也是一个消息响应函数响应wmnccreate消息发送消息以告诉窗口的客户区即将被创建5onnccalcsize该函数也是消息响应函数响应wmnccalcsize消息作用是允许改变窗口客户区大小6oncreate该函数也是一个消息响应函数响应wmcreate消息发送消息告诉一个窗口已经被创建7onsize该函数也是一个消息响应函数响应wmsize消息发送该消息以告诉该窗口大小已经发生变化8onmove消息响应函数响应wmmove消息发送此消息说明窗口在移动9onchildnotify该函数为重载函数作为部分消息映射被调用告诉父窗口即将被告知一个窗口刚刚被创建mfc应用程序关闭窗口的顺序非模态窗口1onclose消息响应函数响应窗口的wmclose消息当关闭按钮被单击的时候发送此消息2ondestroy消息响应函数响应窗口的wmdestroy消息当一个窗口将被销毁时发送此消息3onncdestroy消息响应函数响应窗口的wmncdestroy消息当一个窗口被销毁后发送此消息4postncdestroy重载函数作为处理onncdestroy函数的最后动作被cwnd调用mfc应用程序中打开模式对话框的函数调用顺序1domodal重载函数重载domodal成员函数2presubclasswindow重载函数允许首先子分类一个窗口3oncreate消息响应函数响应wmcreate消息发送此消息以告诉一个窗口已经被创建4onsize消息响应函数响应wmsize消息发送此消息以告诉窗口大小发生变化5onmove消息响应函数响应wmmove消息发送此消息以告诉窗口正在移动6onsetfont消息响应函数响应wmsetfont消息发送此消息以允许改变对话框中控件的字体7oninitdialog消息响应函数响应wminitdialog消息发送此消息以允许初始化对话框中的控件或
VC中的模态对话框和非模态对话框

2 、非 模 态对 话框
非 模 态 对 话 框 则 是 另 一 种 对 话 框 形 式 。 当 显 示 出 非 模
态 对 话 框 时 , 程 序 的 其 他 部 分 能 够 照 常 运 行 。 因 此 非 模 态 B OOL CD ao : :C e t ( N I T mPa e iI q r a e UI T n D e lt ,C n W d
( 选 择 资源视 图 窗格 ,显 示 出工程 的资 源。 1)
层 的 模 态 对话 框 进 行 操 作 ,并 且 当 它 关 闭 时 程 序 将 返 回 到 打 资源 的步 骤 : 使 用 模 态 对话 框 时 ,在对 话 框 弹 出 后调 用 函 数 不 会立 即返
回 ,而 是 等 到 对话 框 销 毁 后 才会 返 回 ,所 以使 用 对话 框 时 其 他
A PPLI A T C ION
■ _
V 中的模 态对 话框和 非模 态对话框 C
话框 。它 们都 有 各 自的用途 ,掌握 它很 有必 要 。
摘 要 :VC中对 话 框分 为 两 大 类 ,模 态 对话 框 和 非模 态 对 能 。至于 新添 的对话 框 的控件 功 能则 与主对 话框 是 一致 的。 如 果 只 是 需 要 一 个 对 话 框 来 提 示 用 户 的 话 , 调 用 Ax sae o fMe s g B x() 函数 并输 入 不 同 的参 数 。第 一种 形式 下 第 关 键词 :模 态 对话 框 ;非模 态对 话框 ;屙 l 生
则 非模 态对 话框 将是 不 可见 的。
3 、通 用 埘 话 框 和 属 性 对 话 框
W id ws系统 中提 供 了一 些通 用对 话框 ,如 :文件 选 择对 no 话 框 、颜 色 选 择对 话 框 、字 体 选择 对 话 框 等 ,他 们 分别 在 MF C 中使 用 Ci Dao 、C o r io 、C o t io 来表 示 。 fe i g c l Da g F nDa g l l o l l
VC14

UpdateData(FALSE);
2012-12-16 12
}
14.2 对话框的设计
8、添加菜单响应代码。 { } CAreaDlg dlg; dlg.domodal();
2012-12-16
13
2012-1Leabharlann -16 914.2 对话框的设计
一、使用ClassWizard建立对话框类
1、建立新的对话框类
2、消息:WM_INITDIALOG和控件通知消息。 WM_INITDIALOG可
以为建立的对话框类自动添加OnInitDialog()函数的框架,程序员可在
其中加入自己的对话框初始化代码。
第14章 对话框
对话框 对话框的设计 创建基于对话框的应用程序 MFC的消息映射机制及其实现
2012-12-16
1
14.1 对话框
一、模式对话框和非模式对话框
在MFC中,对话框的功能封装在Cdialog类中 ,Cdialog类 是CWnd类的派生类。 对话框分为模式对话框和非模式对话框两类。 模式对话框运行垄断了用户的输入,当一个模式对话框打 开时,用户只能与该打开的对话框进行交互,而其它用户 界面对象不能接受用户的信息,直至关闭该模式对话框。 非模式对话框类似普通的Windows窗口,比如资源管理器, 并不垄断用户的输入。在非模式对话框打开时,用户可以 同时打开其它窗口对象,操作完毕后,又可用鼠标或其它 方式激活该窗口。
2012-12-16
3
14.1 对话框
三、对话框类CDialog
1、Cdialog类的成员函数
Cdialog类是所有对话框类的基类。它定义了一个构造函 数和一个Create()成员函数来创建对话框。构造函数根据对 话框模板ID来访问对话框资源,该函数经常用于构造一个 基于资源的模式对话框。而Create()函数则使用对话框模板, 由资源创建无模式对话框。
【初学VC讲稿】第5篇:对话框应用简单示例

进行更新使之包含新的对话框资源,并且该项目的resource.h文件也会被更新,以便能包含
新的#define常量。
(2)利用ClassWizard创建Cdialog的派生类,并将它同第一步创建的资源相连接。ClassWizard会自动在Developer Studio的项目中加入相应的代码和头文件。
今天我们来学习对话框的编程
【知识要点】(参考《Visual C++技术内幕》)
1,模式对话框(Modal dialog box):打开后直至关闭期间不可在应用程序的其它位置工作。非模式对话框(Modalless dialog box):打开后直至关闭期间可在应用程序的其它位置工作。
2,对话框编程的一般步骤
while(1)
{s
if(dlg.DoModal()==IDCANCEL)//选择[退出]将退出应用程序
{
return false;
}
if(dlg.m_strPassword=="123456")//密码正确,跳出循环
{
break;
}
else//密码不正确,提示重新输入
{
AfxMessageBox("密码不正确,请重新输入");
Member variable name:m_strPassword
Category:value
Variable type:Cstring
4,在MyDefMsg.cpp文件中修改BOOL CMyDefMsgApp::InitInstance()
BOOL CMyDefMsgApp::InitInstance()
讲座四 VS2010(MFC)编程--几种常见对话框

VS2010(MFC)编程--几种对话框VS2010/MFC编程:模态对话框及其弹出过程加法计算器对话框程序大家照着做一遍后,相信对基于对话框的程序有些了解了,有个好的开始对于以后的学习大有裨益。
趁热打铁,这一节讲讲什么是模态对话框和非模态对话框,以及模态对话框怎样弹出。
一.模态对话框和非模态对话框Windows对话框分为两类:模态对话框和非模态对话框。
模态对话框是这样的对话框,当它弹出后,本应用程序其他窗口将不再接受用户输入,只有该对话框响应用户输入,在对它进行相应操作退出后,其他窗口才能继续与用户交互。
非模态对话框则是,它弹出后,本程序其他窗口仍能响应用户输入。
非模态对话框一般用来显示提示信息等。
大家对Windows系统很了解,相信这两种对话框应该都遇到过。
之前的加法计算器对话框其实就是模态对话框。
二.模态对话框是怎样弹出的毕竟加法计算器程序大部分都是MFC自动生成的,对话框怎么弹出来的大家可能还不是很清楚。
下面简单说说它是在哪里弹出来的,再重新建一个新的对话框并弹出它,这样大家实践以后就能更灵活的使用模态对话框了。
大家打开Addition.cpp文件,可以看到CAdditionApp类有个InitInstance()函数,在MFC应用程序框架分析中提到过此函数,不过那是单文档应用程序App类中的,函数体不太相同,但都是进行App类实例的初始化工作。
InitInstance()函数的后半部分有一段代码就是定义对话框对象并弹出对话框的,下面给出这段代码并加以注释:C++代码弹出对话框比较关键的一个函数,就是对话框类的DoModal()函数。
CDialog::DoModal()函数的原型为:virtual INT_PTR DoModal();返回值:整数值,指定了传递给CDialog::EndDialog(该函数用于关闭对话框)的nResult 参数值。
如果函数不能创建对话框,则返回-1;如果出现其它错误,则返回IDABORT。