文档介绍:第3章对话框和常见控件
对话框和控件之间是一对密不可分的卵生姐妹。通常来讲,对话框中有一些控件元素,控件通常也建在对话框中。对话框是一个弹出式的标准窗口。当我们在一个应用程序中需要用户进行数据的输入,或需要与用户进行对话,对话框弹出来让用户从一系列输入操作中进行选择,而每一种操作都对应着一个控件的实现,这些控件由诸如单选按钮、复选按钮、编辑框和列表框等对象组成。
对话框编程我们可以使用对话框函数。使用对话框函数除了待处理消息不同外,在其它方面对话框函数均类似于窗口函数。实际上,对话框的许多函数就是从窗口类派生的。
Windows对话框有两种基本类型:
l         有模式对话框(Model Dialog)
l         无模式对话框(Modeless Dialog)。
有模式对话框使父窗口操作无效,不允许用户回到父窗口操作。当有模式对话框工作时,对话框消息处理循环从应用队列中直接接收消息传递给对话框函数,WinMain函数收不到消息。与有模式对话框相反,无模式对话框不妨碍父窗口的正常工作,无模式对话框接收WinMain函数消息循环的输入,它没有自己的消息循环。
标准控件也是一些行为标准化了的窗口,一般用在对话框或其它窗口中充当与用户交互的窗口元素。在Visual C++中,可以使用的控件分成三类:Windows标准控件,ActiveX控件,其它MFC控件类。在本章中我们仅讲述Windows标准控件。所讲的内容主要包括各个控件的使用及相应的使用技巧。
有模式对话框
 
对话框是大多数Windows应用程序的重要的用户界面组件。在Windows开发中弹出对话框是一种常用的I/O手段,我们需要将一个自建并编辑好的对话框保存在Visual C++应用工程的资源文件中。Visual C++提供了对话框编辑工具,我们利用编辑工具可以方便的添加各种控件到对话框中去,而且利用ClassWizard可以方便的生成新的对话框类和映射消息。我们可以用对话框资源编辑器创建对话框模板,。然后基于对话框的模板用ClassWizard创建一个从CDialog 类派生的对话框类,最后建立该类对象,建立对话框。
模式对话框实现
 
对话框是一个特殊的窗口,主要用于用户的数据输入。由于对话框是窗口,所以它和其它窗口一样响应消息。尽管一般窗口处理大量消息,而一般对话框只处理两种消息:MAND。当对话框窗口被创建后,在对话框显示之前,对话框先接收消息WM_CREATE,然后响应消息WM_INITDIALOG。WM_INITDIALOG消息在对话框窗口创建之后并且已初始化了所有对话框里的控件以后到达。对话框窗口获得WM_INITDIALOG消息之后将处理派生类中的OnInitDialog()消息处理函数。在这里我们可以修改控件数据,不过修改控件数据要在对话框显示之前。
MFC 提供类CDialog作为对话框服务的基类,类CDialog将对话框模板与使用对话框时必需熟悉的几种类方法进行封装。对于对话框中发送消息的的控件,我们可创建相应的消息处理程序。MFC编译器提供的框架工具使得我们把对话框中的控件消息映像到派生类的类函数变得简单、快捷。对话框数据映像函数使用专门的值初始化对话框中的控件,接着检索数据并使之有效。大多数对话框需要类成员变量来跟踪用户的输入,这些数据在数据映像中使用,它们在对话控件与类变量之间自动映像数据。
为创建对话框,首先建立CDialog对象,然后创建和显示对话框窗口我们有两种选择:一种方法是调用函数CDialog::DoModal()来创建有模式对话框窗口,另一种方法是调用函数CDialog::Create()来创建无模式对话框窗口,在上述两种情况之下,对话框对象先初始化,然后创建对话框以及它的控件。
类CDialog成员函数Create()使用两种重载原形,最常用的一种如下:
Create(UINT nIDTemplate, CWnd * pParentWnd=NULL);
其中,参数nIDTemplate是一个对话框模板的标识符,
参数pParentWnd是对话框所属的父窗口。
对话框中的数据交换和数据检查
 
MFC提供两种方法在对话框中进行数据交换和数据检查(Dialog Data Exchange/Dialog Data Validation),数据交换和数据检查的基本思想是将某一变量和对话框中的一个控件窗口进行关联,然后通过调用BOOL UpdateData( BOOL bSaveAndValidate = TRUE )来指示MFC将变量中数据放入控件窗口还是将控件窗口中数据取到变量中并进行合法性检查。
在进行数据交换时一个控件窗口