第3章对话框和常见控件
第3章 对话框和常见控件
对话框和控件之间是一对密不可分的卵生姐妹。通常来 讲,对话框中有一些控件元素,控件通常也建在对话框中 对话框是一个弹出式的标准窗口。当我们在一个应用程序中 需要用户进行数据的输入,或需要与用户进行对话,对话框 弹出来让用户从一系列输入操作中进行选择,而每一种操作 都对应着一个控件的实现,这些控件由诸如单选按钮、复选 按钮、编辑框和列表框等对象组成。 对话框编程我们可以使用对话框函数。使用对话框函数 除了待处理消息不同外,在其它方面对话框函数均类似于窗 口函数。实际上,对话框的许多函数就是从窗口类派生的
对话框和控件之间是一对密不可分的卵生姐妹。通常来 讲,对话框中有一些控件元素,控件通常也建在对话框中。 对话框是一个弹出式的标准窗口。当我们在一个应用程序中 需要用户进行数据的输入,或需要与用户进行对话,对话框 弹出来让用户从一系列输入操作中进行选择,而每一种操作 都对应着一个控件的实现,这些控件由诸如单选按钮、复选 按钮、编辑框和列表框等对象组成。 对话框编程我们可以使用对话框函数。使用对话框函数 除了待处理消息不同外,在其它方面对话框函数均类似于窗 口函数。实际上,对话框的许多函数就是从窗口类派生的
Wnds话框有两种基本类型 有模式对话框( Model dialog) 无模式对话框( Modeless dialog) 有模式对话框使父窗口操作无效,不允许用户回到父窗口操 作。当有模式对话框工作时,对话框消息处理循环从应用队 列中直接接收消息传递给对话框函数, Winmain函数收不到消 息。与有模式对话框相反,无模式对话框不妨碍父窗口的正 常工作,无模式对话框接收 Winmain函数消息循环的输入,它 没有自己的消息循环。 标准控件也是一些行为标准化了的窗口,一般用在对话框或 其它窗口中充当与用户交互的窗口元素。在 Visual o++中,可 以使用的控件分成三类: Windows标准控件, ActiveⅩ控件, 其它MFC控件类。在本章中我们仅讲述 Windows标准控件。 所讲的内容主要包括各个控件的使用及相应的使用技巧
Windows对话框有两种基本类型: l 有模式对话框(Model Dialog) l 无模式对话框 (Modeless Dialog)。 有模式对话框使父窗口操作无效,不允许用户回到父窗口操 作。当有模式对话框工作时,对话框消息处理循环从应用队 列中直接接收消息传递给对话框函数,WinMain函数收不到消 息。与有模式对话框相反,无模式对话框不妨碍父窗口的正 常工作,无模式对话框接收WinMain函数消息循环的输入,它 没有自己的消息循环。 标准控件也是一些行为标准化了的窗口,一般用在对话框或 其它窗口中充当与用户交互的窗口元素。在Visual C++中,可 以使用的控件分成三类:Windows标准控件,ActiveX控件, 其它MFC控件类。在本章中我们仅讲述Windows标准控件。 所讲的内容主要包括各个控件的使用及相应的使用技巧
有模式对话框 对话框是大多数 Windows应用程序的重要的用户界面组 件。在 Windows开发中弹出对话框是一种常用的IO手段,我 们需要将一个自建并编辑好的对话框保存在Ⅴ isual c++应用工 程的资源文件中。 Visual o艹-提供了对话框编辑工具,我们利 用编辑工具可以方便的添加各种控件到对话框中去,而且利 用 Class Wizard可以方便的生成新的对话框类和映射消息。我 们可以用对话框资源编辑器创建对话框模板,对话框资源编 辑器将编辑的模板以扩展名res文件保存在对话框模板资源中 然后基于对话框的模板用 Class Wizard创建一个从 CDialog类 派生的对话框类,最后建立该类对象,建立对话框
有模式对话框 对话框是大多数Windows应用程序的重要的用户界面组 件。在Windows开发中弹出对话框是一种常用的I/O手段,我 们需要将一个自建并编辑好的对话框保存在Visual C++应用工 程的资源文件中。Visual C++提供了对话框编辑工具,我们利 用编辑工具可以方便的添加各种控件到对话框中去,而且利 用ClassWizard可以方便的生成新的对话框类和映射消息。我 们可以用对话框资源编辑器创建对话框模板,对话框资源编 辑器将编辑的模板以扩展名.res文件保存在对话框模板资源中。 然后基于对话框的模板用ClassWizard创建一个从CDialog 类 派生的对话框类,最后建立该类对象,建立对话框
模式对话框实现 对话框是一个特殊的窗口,主要用于用户的数据输入 由于对话框是窗口,所以它和其它窗口一样响应消息。尽管 般窗口处理大量消息,而一般对话框只处理两种消息: WM INDIALOG和 WM COMMAND。当对话框窗口被创 建后,在对话框显示之前,对话框先接收消息 WM CREATE, 然后响应消息WMⅠ NITDIALOG。 WM INTDIALOG消息 在对话框窗口创建之后并且已初始化了所有对话框里的控件 以后到达。对话框窗口获得 WM INTDIALOG消息之后将处 理派生类中的 OnInitDialogO消息处理函数。在这里我们可以 修改控件数据,不过修改控件数据要在对话框显示之前
模式对话框实现 对话框是一个特殊的窗口,主要用于用户的数据输入。 由于对话框是窗口,所以它和其它窗口一样响应消息。尽管 一般窗口处理大量消息,而一般对话框只处理两种消息: WM_INITDIALOG和WM_COMMAND。当对话框窗口被创 建后,在对话框显示之前,对话框先接收消息WM_CREATE, 然后响应消息WM_INITDIALOG。WM_INITDIALOG消息 在对话框窗口创建之后并且已初始化了所有对话框里的控件 以后到达。对话框窗口获得WM_INITDIALOG消息之后将处 理派生类中的OnInitDialog()消息处理函数。在这里我们可以 修改控件数据,不过修改控件数据要在对话框显示之前
MFC提供类 CDialog作为对话框服务的基美,类 CDialog对请框模板与使 用对话框时必需熟悉的几种类方法进行封装。对于对话框中发送消息的的 控件,我们可创建相应的消息处理程序。MFC编译器提供的框架工具使得 我们把对话框中的控件消息映像到派生类的类函数变得简单、快捷。对话 框数据映像函数使用专门的值初始化对话框中的控件,接着检索数据并使 之有效。大多数对话框需要类成员变量来跟踪用户的输入,这些数据在数 据映像中使用,它们在对话控件与类变量之间自动映像数据。 为创建对话框,首先建立 CDialog对象,然后创建和显示对话框窗口我们 有两种选择:一种方法是调用函数 CDialog: DoModal10来创建有模式对话 框窗口,另一种方法是调用函数 CDialog; heateD来创建无模式对话框窗口, 在上述两种情况之下,对话框对象先初始化,然后创建对话框以及它的控 件 类 CDialog成员函数 Create使用两种重载原形,最常用的一种如下: Create(UINT nIDTemplate, CWnd* pParentWnd-=NULL) 其中,参数 nIDTemplate是一个对话框模板的标识符, 参数 pArent Wnd是对话框所属的父窗口
MFC 提供类CDialog作为对话框服务的基类,类CDialog将对话框模板与使 用对话框时必需熟悉的几种类方法进行封装。对于对话框中发送消息的的 控件,我们可创建相应的消息处理程序。MFC编译器提供的框架工具使得 我们把对话框中的控件消息映像到派生类的类函数变得简单、快捷。对话 框数据映像函数使用专门的值初始化对话框中的控件,接着检索数据并使 之有效。大多数对话框需要类成员变量来跟踪用户的输入,这些数据在数 据映像中使用,它们在对话控件与类变量之间自动映像数据。 为创建对话框,首先建立CDialog对象,然后创建和显示对话框窗口我们 有两种选择:一种方法是调用函数CDialog::DoModal()来创建有模式对话 框窗口,另一种方法是调用函数CDialog::Create()来创建无模式对话框窗口, 在上述两种情况之下,对话框对象先初始化,然后创建对话框以及它的控 件。 类CDialog成员函数Create()使用两种重载原形,最常用的一种如下: Create(UINT nIDTemplate, CWnd * pParentWnd=NULL); 其中,参数nIDTemplate是一个对话框模板的标识符, 参数pParentWnd是对话框所属的父窗口
对话框中的数据交换和数据检查 MFC提供两种方法在对话框中进行数据交换和数据检查( Dialog data ExchangeDialog data validation),数据交换和数据检查的基本思想是 将某一变量和对话框中的一个控件窗口进行关联,然后通过调用BOOL Updatedata( BOOL bSaveAndvalidate=TRUE)来指示MFC将变量中数 据放入控件窗口还是将控件窗口中数据取到变量中并进行合法性检查。 在进行数据交换时一个控件窗口可以和两种类型的变量相关联, 种是控件( Control)对象,比如说按钮控件窗口可以和一个 CButton对 象相关联,这种情况下我们可以通过该对象直接控制控件窗口,当然我 们可以使用 GetDlgltem(DC CONTROL D)来得到窗口对象指针 种是内容对象,比如说输入框可以和一个 CString对象关联,也可以和 个UT类型变量关联,这种情况下我们可以直接设置或获取窗口中 的输入内容
对话框中的数据交换和数据检查 MFC提供两种方法在对话框中进行数据交换和数据检查(Dialog Data Exchange/Dialog Data Validation),数据交换和数据检查的基本思想是 将某一变量和对话框中的一个控件窗口进行关联,然后通过调用BOOL UpdateData( BOOL bSaveAndValidate = TRUE )来指示MFC将变量中数 据放入控件窗口还是将控件窗口中数据取到变量中并进行合法性检查。 在进行数据交换时一个控件窗口可以和两种类型的变量相关联,一 种是控件(Control)对象,比如说按钮控件窗口可以和一个CButton对 象相关联,这种情况下我们可以通过该对象直接控制控件窗口,当然我 们可以使用GetDlgItem(IDC_CONTROL_ID)来得到窗口对象指针;一 种是内容对象,比如说输入框可以和一个CString对象关联,也可以和 一个UINT类型变量关联,这种情况下我们可以直接设置或获取窗口中 的输入内容
而数据检查是在一个控件窗口和一个内容对象相关联时 在存取内容时对内容进行合法性检查,比如说当一个输入 框和一个 CString对象关联时,我们可以设置检查 CString的 对象的最长最小长度,当输入框和一个UNT变量相关联时 我们可以设置检查UNT变量的最大最小值。在BOOL Updatedata( BOOL DSaveandvalidate=TRUE)被调用后, 合法性检査会自动进行,如果无法通过检查MFC会弹出消 息框进行提示,并返回 FALSE。 设置 DDX/DDV在 Visual o++中非常简单, Class Wizard 可以替我们完成所有的工作,我们只需要打开 Class Wizard 并选中 Member variables页,我们可以看到所有可以进行关 联的控件窗口ID列表,双击一个ID会弹出一个添加变量的 对话框,然后填写相关的信息后按下确定按钮就可以了 然后选中刚才添加的变量在底部的输入框中输入检查条件
而数据检查是在一个控件窗口和一个内容对象相关联时 在存取内容时对内容进行合法性检查,比如说当一个输入 框和一个CString对象关联时,我们可以设置检查CString的 对象的最长/最小长度,当输入框和一个UINT变量相关联时 我们可以设置检查UINT变量的最大/最小值。在BOOL UpdateData( BOOL bSaveAndValidate = TRUE )被调用后, 合法性检查会自动进行,如果无法通过检查MFC会弹出消 息框进行提示,并返回FALSE。 设置DDX/DDV在Visual C++中非常简单,ClassWizard 可以替我们完成所有的工作,我们只需要打开ClassWizard 并选中Member Variables页,我们可以看到所有可以进行关 联的控件窗口ID列表,双击一个ID会弹出一个添加变量的 对话框,然后填写相关的信息后按下确定按钮就可以了。 然后选中刚才添加的变量在底部的输入框中输入检查条件
Windows标准控件 MFC提供了一组与 Microsoft windows所提供的标准控 件窗口相对应的类。这些类主要有:静态类、按钮类、 编辑控件类、滚动条类、列表框类和组合框类等。每个 控件类都封装了一个 Windows控件,并提供了与基本控件 之间的成员函数用户接口。使用一个控件对象的成员函 数,就可以获取和设置控件的值或状态,并响应由该控 件送给其父窗口(通常为一个对话框)的各种标准消息 控制是 Control的意译,又叫控件,以下我们对控制和 控件不加区分。除了上述标准的 Windows控制之外, MFC还提供了以位图作标签的按钮等控制
Windows标准控件 MFC 提供了一组与 Microsoft Windows 所提供的标准控 件窗口相对应的类。这些类主要有:静态类、按钮类、 编辑控件类、滚动条类、列表框类和组合框类等。每个 控件类都封装了一个Windows控件,并提供了与基本控件 之间的成员函数用户接口。使用一个控件对象的成员函 数,就可以获取和设置控件的值或状态,并响应由该控 件送给其父窗口(通常为一个对话框)的各种标准消息。 控制是Control 的意译,又叫控件,以下我们对控制和 控件不加区分。除了上述标准的Windows 控制之外, MFC还提供了以位图作标签的按钮等控制
静态文本控件 静态文本控件的功能比较简单,可作为显示字符串、图标、位图 用。创建一个窗口可以使用成员函数: BOOL CStatic.: Create(LPCtstrlpszText, DWORD dwStyle, const RECT& rect, CWnd*pParentWnd,UINTn ID=0xffff) 其中, dwstyle将指明该窗口的风格,除了子窗口常用的风格 WS CHILD, WS VISIBLE外,我们可以针对静态控件指明专门的风格。 SS CENTER, SS LEFT,SS RIGHT指明字符显示的对齐方式 SS GRAYRECT显示一个灰色的矩形 SS NOPREFⅨX如果指明该风格,对于字符&将直接显示,否则 &将作为转义符,&将不显示而在其后的字符将有下划线,如果需要 直接显示&必须使用&&表示 SS BITMAP显示位图 SS ICON显示图标 SS CENTERIMAGE图象居中显示 利用成员函数 Set window text设置控件显示的文本 GetWindowText得 到控件当前显示的文本,利用成员函数 Satcon设置控件显示的图标 Celcon得到控件当前显示的图标,利用成员函数 Setbitmap设置控 件显示的位图, GetBitmap得到控件当前显示的位图
静态文本控件 静态文本控件的功能比较简单,可作为显示字符串、图标、位图 用。创建一个窗口可以使用成员函数: BOOL CStatic::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff ); 其中,dwStyle将指明该窗口的风格,除了子窗口常用的风格 WS_CHILD,WS_VISIBLE外,我们可以针对静态控件指明专门的风格。 l SS_CENTER,SS_LEFT,SS_RIGHT 指明字符显示的对齐方式。 l SS_GRAYRECT 显示一个灰色的矩形 l SS_NOPREFIX 如果指明该风格,对于字符&将直接显示,否则 &将作为转义符,&将不显示而在其后的字符将有下划线,如果需要 直接显示&必须使用&&表示。 l SS_BITMAP 显示位图 l SS_ICON 显示图标 l SS_CENTERIMAGE 图象居中显示 利用成员函数SetWindowText 设置控件显示的文本GetWindowText 得 到控件当前显示的文本,利用成员函数SetIcon设置控件显示的图标 GetIcon得到控件当前显示的图标,利用成员函数SetBitmap 设置控 件显示的位图,GetBitmap得到控件当前显示的位图