说到对话框,其实脑海里会呈现出很多,比如聊天来自对话框,发送信息的对话框,这360百科个其实也要分领域的。普遍的都认为是一种次要窗口,包含按钮和各种选项,通过它们可以完成特定命令或任代合务。 查找和替换对话框 对话框与窗口有区别,它没有最大化按钮、没有最小左术活察余按化按钮、大都不能改积致林家要样创变形状大小。("打开文件"对话框是可以改变大小的) 对话框:是人机交流的一种方式,用户对对话框进行设置,计算机就会执青部模怎系观色与清行相应的命令。对话框中有单选框、复选框等。
对话框主要由两部分组成。
对话框资源:几怕飞神除地怕业害含可以使用对话框编辑器来配置对话框的界面,如对话框的大小、位置宪宣客领婷为商例、样式,对话框中控件的类型和位置等。另外,我们还可以在程序的执行过程中动态创建对话框资儿外安满众年准字思要头源。
对话框类:在MFC程序中,可以使用向导帮助用户建立一个与对话框资源相关联的类,通常这个类由CDialog类派生。
对话框可以分为模式对话框和无模式对话框两种类型。
CDialog
为了能够方便的操作对话框,MFC为用户提供了CDialog类。它是在屏幕上显示对话框的基类,与对话框资源紧密相关,提供了管理对话框的接口,封装了一些对话框来自的相关操作。
从CDi360百科alog的定义代码可以看出,Cdialog提供了两套构建Cdialog对象的系统,分别用于模式对话框和无模式对话框。
无模式对话框对象的构建代介过程,它首先调用缺省的构造函数生成对话框对象,然后调用Create函数创建和初始化对话框。Cdialo态超g类中的Create函数有两种函数原型:
BOOL Create( LPCTSTR lpszTemplat错十器eName, CWnd* 影责球pParentWnd = NULL );
BOOL Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );
其中,
参数l听乎行从顺从市屋动行钟pszTemplateName是无模式对话框模板资源的标她刑额民红息跑确集味早志符;
参数nIDTemplat是对话框模板资源的标志符,它通常以IDD_开头(例如IDD_DIALOG1);
参数pParen保尔tWnd是指向对话框对象得只所属的父窗口的指针(如果它为NULL,则表示对话框对象的父窗口是应用程序主窗口)。如果希望对话框中它的父窗口创建后马上被显示,就必须把对话框模板设置为WS季执就解四船径_VISIBLE形式。否则,需要调用ShowWindow函数来显示对话框。
龙宜附渐夜额首以染稳对于模式对话框,其构造函数如下所示:
CDialog( 温记装迅置道轻松担常LPCTSTR lpszTemplateName, CWnd* pP卫理材报轴属增跳arentWnd = NULL );
CDialog( UINT nIDTemplate, CWnd* pParentWnd = NULL );
构造函数的参数说明与无模式对话框的Create函数类似。在模式对话框中,当创建了对话框对象后,可以通过调用DoModal函数来显示对话因不框。
一般情况下富品甲飞二走调毫,无论是模式对话框还是无模式对话框,都有两个按钮OK和CANCEL。对话框为它们提供了默认的消息处理函数OnOk和OnCancel。调用这两个函数都将关闭对话框。所不同的是,默认的OnOk投函数中关闭对话框前将更新对话框数据,而默认的OnCancel函数不更新对话框数据。
当CDialog类检测到OK或Cancel键时,它将调用::EndDialog函数。EndDialog函数虽然结束了对话框应用程序,但却并没有删除对话框对象,释放内存。这对于模式对话框来说,不是问题,它的生存时间不长,我们一般在栈上创建它们;但无模式对话框则不同,它的生存时间更长,我们通常在堆上创建它们,并且希望它在消失之前能够删除自己。因此,大多数情况下,我们需要在无模式对话框中重载OnOK和OnCancel函数,加入DestroyWindows函数来彻底地删除它。
来自 在VC中,所有360百科的对话框函数都是使用C++代码实现的,它并没有采用特殊的资源或"奇特"的宏,但却可以很好地实现用户与应用程序之间的交互工作,这里的关键就在于对话框应用程序中广泛采用的对话框数据交换和验证机制。
对话框数据交换(DDX,Dial笔og Data Exchange)用于初始化对话框中的控件并获取用户的数据输入,而对话框数据验证(DDV,Dialog Data Validation)则用于验证对话框中数据输入的有效性。MFC在每个对话框类中提供了一个用于重载的虚函数--DoDataExchan差服果节触ge来实现对话框数据交换和验证工作。
如果缺革复行重使用DDX机制,则科做款祖座号通常在OnInitDialog程序或对话框构造函数中设置对话框对象成员变量的初始值。在对话框即将显示前,应用程序框架的DDX机制将成员变量的值传递给对话框的控件,当对话框响应DoModal或Create而被显示时,对话框控且厂财请喜该为率危件将"显示"这些值。Cdialog类中的OnInitDialog函数默认时将调用CWnd类的UpdateData成下题色洋省一候员函数初始化对话框中的控件。UpdateData函数的原型如能重命群艺已达具下:
BOOL UpdateData( BOOL bSaveAndValidate = TRUE );
赶斗 函数参数为TRUE,即将对话框及其控件中的数据传递给程序代码中的成员变量;
函数参数为FALSE,即将类中的数据状态传递给对话框及其控件。
当用户重载DoDataExch华特固拿标沙底七洲养科ange函数时,也就为每一个数据成员(控件)指定了一个DDX函数调用。
除了调用DDX参数指定数据交换外,用户还可以使用DDV函数进行对话框数据验证。在调用控件的DDX函数后,必须立即调用该控件的DDV函数。大部分DDV函数的原型如下所示。
DD刘七统界脱改对话书茶V_MinMaxCustom(pDX, Data, MinData, MaxData);
其中,参数pDX是一个指向CdataEx永change对象的指针,参数Data中存放着即将被验证的数据,后侵操治孙亮注最防快象食两个参数用于定制数据的范围。
CdataExchange类
如果仅仅需要使用对话框数据,一般没有必要热厚老烧至流破了解数据交换/验证的核心内容。但在了解了数据交换和验证的实质后,用户就可以编写自己的数据交换和验证代码,定制DDX/DDV.
控件是一个可以与其交互以完成输入或操作数据操年台背养坏守里略作的对象,它也是一种特殊的窗口。控件通常出现在对话框或工具栏中。Windows提供温著面味渐结了多种多样的控件,在MFC应用程序中,能作协力但临架够使用的控件通常可以分为三种。
视气云初 1)windows公用控件:包括编辑控民问挥斤延得肥专父掌以件、按钮、列表框、组合框、滑动条控件等,另外也包括所有者描述的控件。
2)ActiveX控件:既可以在对话框中使用,也可以在HTML网页中使用。
3)由MFC提供的其他控件类
我们主要介绍第一种类型的控件--Windows公用控件。
Windows操作系统提供了多种windows公用控件,这些控件对象都是可编程的,Visual C++的对话框编辑器支持将这些控件对象添加到对话框中。用户可以在工具箱的对话框编辑器中看到这些windows公用控件。MFC为了更好的支持windows公用控件,提供了多种控件类,每一个控件类封装一种控件,并提供相应的成员函数来管理操作控件。
我们在使用Windows系统的过程中经常会见到消息对话框,提示我们有异常发生或提出询问等。因为在软件开发中经常用到消息对话框,所以MFC提供了两个函数可以直接生成指定风格的消息对话框,而不需要我们在每次使用的时候都要去创建对话框资源和生成对话框类等。这两个函数就是CWnd类的成员函数MessageBox()和全局函数AfxMessageBox()。
一、CWnd::MessageBox()函数和AfxMessageBox()函数的用法
下面分别讲解两个函数的用法。
1、CWnd::MessageBox()函数
CWnd::MessageBox()的函数原型如下:
int MessageBox(
LPCTSTR lpszText,
LPCTSTR lpszCaption = NULL,
UINT nType = MB_OK
);
参数说明:
lpszText:需要显示的消息字符串。
lpszCaption:消息对话框的标题字符串。默认值为NULL。取值为NULL时使用默认标题。
nType:消息对话框的风格和属性。默认为MB_OK风格,即只有"确定"按钮。
nType的取值可以是下面两个表中任取一个值,也可以是各取一个值的任意组合。即可以指定一个对话框类型,也可以指定一个对话框图标,还可以两者都设定。
对话框类型表:
nType 取值参数说明
MB_ABORTRETRY 有"终止"、"重试"和"忽略"按钮
MB_OK 有"确定"按钮
MB_OKCANCEL 有"确定"和"取消"按钮
MB_RETRYCANCEL 有"重试"和"取消"按钮
MB_YESNO 有"是"和"否"按钮
MB_YESNOCANCEL 有"是"、"否"和"取消"按钮
对话框图标类型表:
nType
MB_ICONEXCLAMTION
MB_ICONWARNING
MB_ICONASTERISK
MB_ICONINFORMATION
MB_ICONQUESTION
MB_ICONHAND
MB_ICONSTOP
MB_ICONERROR
如果想要设置nType的值为类型和图标的组合,可以像这样取值:MB_OKCANCEL | MB_ICONQUESTION。按位取或就可以了。
2、AfxMessageBox()函数
AfxMessageBox()的函数原型为:
int AfxMessageBox(
LPCTSTR lpszText,
UINT nType = MB_OK,
UINT nIDHelp = 0
);
参数说明:
lpszText:同CWnd::MessageBox()函数
nType:CWnd::MessageBox()函数
nIDHelp:此消息的帮助的上下文ID。默认值为0,取0时表示要使用应用程序的默认帮助上下文。
二、CWnd::MessageBox()和AfxMessageBox()的返回值
我们在调用了上面两个函数后,都可以弹出模态消息对话框。消息对话框关闭后,我们也都可以得到它们的返回值。两者的返回值就是用户在消息对话框上单击的按钮的ID,可以是以下值:
IDABORT:单击"终止"按钮。
IDCANCEL:单击"取消"按钮。
IDIGNORE:单击"忽略"按钮。
IDNO:单击"否"按钮。
IDOK:单击"确定"按钮。
IDRETRY:单击"重试"按钮。
IDYES:单击"是"按钮。