Windows程序设计 第3章 对话框和常见控件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
树形控件
树形控件(TreeCtrl)和下面要讲的列表控件(ListCtrl) 在系统中大量被使用,例如Windows资源管理器就是一 个典型的树形控件例子。 树形控件可以用于树形的结构,其中有一个根接点(Root) (Root) 然后下面有许多子结点,而每个子结点上有允许有一个 或多个或没有子结点。MFC中使用CTreeCtrl类来封装树 形控件的各种操作。通过调用 BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
第3章 对话框和常见控件
对话框和控件之间是一对密不可分的卵生姐妹。通常来 讲,对话框中有一些控件元素,控件通常也建在对话框中。 对话框是一个弹出式的标准窗口。当我们在一个应用程序中 需要用户进行数据的输入,或需要与用户进行对话,对话框 弹出来让用户从一系列输入操作中进行选择,而每一种操作 都对应着一个控件的实现,这些控件由诸如单选按钮、复选 按钮、编辑框和列表框等对象组成。 对话框编程我们可以使用对话框函数。使用对话框函数 除了待处理消息不同外,在其它方面对话框函数均类似于窗 口函数。实际上,对话框的许多函数就是从窗口类派生的。
ห้องสมุดไป่ตู้ 树形控件
树形控件(TreeCtrl)和下面要讲的列表控件(ListCtrl) 在系统中大量被使用,例如Windows资源管理器就是一个典 型的树形控件例子。 树形控件可以用于树形的结构,其中有一个根接点(Root) 然后下面有许多子结点,而每个子结点上有允许有一个或多 个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件的 各种操作。通过调用 BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
Windows对话框有两种基本类型: 有模式对话框(Model Dialog) 无模式对话框 (Modeless Dialog)。 有模式对话框使父窗口操作无效,不允许用户回到父窗口操 作。当有模式对话框工作时,对话框消息处理循环从应用队 列中直接接收消息传递给对话框函数,WinMain函数收不到消 息。与有模式对话框相反,无模式对话框不妨碍父窗口的正 常工作,无模式对话框接收WinMain函数消息循环的输入,它 没有自己的消息循环。 标准控件也是一些行为标准化了的窗口,一般用在对话框或 其它窗口中充当与用户交互的窗口元素。在Visual C++中,可 以使用的控件分成三类:Windows标准控件,ActiveX控件, 其它MFC控件类。在本章中我们仅讲述Windows标准控件。 所讲的内容主要包括各个控件的使用及相应的使用技巧。
列表框
列表框(ListBox)窗口用来列出一系列的文本,每条文 本占一行。 创建一个列表窗口可以使用成员函数: BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
而数据检查是在一个控件窗口和一个内容对象相关联时 在存取内容时对内容进行合法性检查,比如说当一个输入 框和一个CString对象关联时,我们可以设置检查CString的 对象的最长/最小长度,当输入框和一个UINT变量相关联时 我们可以设置检查UINT变量的最大/最小值。在BOOL UpdateData( BOOL bSaveAndValidate = TRUE )被调用后, 合法性检查会自动进行,如果无法通过检查MFC会弹出消 息框进行提示,并返回FALSE。 设置DDX/DDV在Visual C++中非常简单,ClassWizard 可以替我们完成所有的工作,我们只需要打开ClassWizard 并选中Member Variables页,我们可以看到所有可以进行关 联的控件窗口ID列表,双击一个ID会弹出一个添加变量的 对话框,然后填写相关的信息后按下确定按钮就可以了。 然后选中刚才添加的变量在底部的输入框中输入检查条件。
模式对话框实现
对话框是一个特殊的窗口,主要用于用户的数据输入。 由于对话框是窗口,所以它和其它窗口一样响应消息。尽管 一般窗口处理大量消息,而一般对话框只处理两种消息: WM_INITDIALOG和WM_COMMAND。当对话框窗口被创 建后,在对话框显示之前,对话框先接收消息WM_CREATE, 然后响应消息WM_INITDIALOG。WM_INITDIALOG消息 在对话框窗口创建之后并且已初始化了所有对话框里的控件 以后到达。对话框窗口获得WM_INITDIALOG消息之后将处 理派生类中的OnInitDialog()消息处理函数。在这里我们可以 修改控件数据,不过修改控件数据要在对话框显示之前。
对话框中的数据交换和数据检查
MFC提供两种方法在对话框中进行数据交换和数据检查(Dialog Data Exchange/Dialog Data Validation),数据交换和数据检查的基本思想是 将某一变量和对话框中的一个控件窗口进行关联,然后通过调用BOOL UpdateData( BOOL bSaveAndValidate = TRUE )来指示MFC将变量中数 据放入控件窗口还是将控件窗口中数据取到变量中并进行合法性检查。 在进行数据交换时一个控件窗口可以和两种类型的变量相关联,一 种是控件(Control)对象,比如说按钮控件窗口可以和一个CButton对 象相关联,这种情况下我们可以通过该对象直接控制控件窗口,当然我 们可以使用GetDlgItem(IDC_CONTROL_ID)来得到窗口对象指针;一 种是内容对象,比如说输入框可以和一个CString对象关联,也可以和 一个UINT类型变量关联,这种情况下我们可以直接设置或获取窗口中 的输入内容。
按钮控件
在MFC类库中,按钮控件使用类CButton表示,CButton包 含了三种样式的按钮: 命令按钮(Push Button) 复选按钮(Check Box) 单选按钮(Radio Box) 所以我们在利用CButton对象生成按钮窗口时需要指明按 钮的风格。 创建按钮的函数原型如下所示: BOOL CButton::Create( LPCTSTR lpszCaption, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );
Windows标准控件 标准控件
MFC 提供了一组与 Microsoft Windows 所提供的标准控 件窗口相对应的类。这些类主要有:静态类、按钮类、 编辑控件类、滚动条类、列表框类和组合框类等。每个 Windows 控件类都封装了一个Windows控件,并提供了与基本控件 之间的成员函数用户接口。使用一个控件对象的成员函 数,就可以获取和设置控件的值或状态,并响应由该控 件送给其父窗口(通常为一个对话框)的各种标准消息。 控制是Control 的意译,又叫控件,以下我们对控制和 控件不加区分。除了上述标准的Windows 控制之外, MFC还提供了以位图作标签的按钮等控制。
滚动条控件
滚动条(Scroll Bar)一般不会单独使用,因为SpinCtrl 可以取代滚动条的一部分作用,但是如果我们需要自己生 成派生窗口,滚动条还是会派上一些用场。创建一个滚动 条可以使用成员函数: : BOOL CEdit::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
编辑框控件
编辑框(Edit Box)控件Edit窗口是用来接收用户输 入最常用的一个控件。创建一个输入窗口可以使用成员 函数: BOOL CEdit::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
MFC 提供类CDialog作为对话框服务的基类,类CDialog将对话框模板与使 用对话框时必需熟悉的几种类方法进行封装。对于对话框中发送消息的的 控件,我们可创建相应的消息处理程序。MFC编译器提供的框架工具使得 我们把对话框中的控件消息映像到派生类的类函数变得简单、快捷。对话 框数据映像函数使用专门的值初始化对话框中的控件,接着检索数据并使 之有效。大多数对话框需要类成员变量来跟踪用户的输入,这些数据在数 据映像中使用,它们在对话控件与类变量之间自动映像数据。 为创建对话框,首先建立CDialog对象,然后创建和显示对话框窗口我们 有两种选择:一种方法是调用函数CDialog::DoModal()来创建有模式对话 框窗口,另一种方法是调用函数CDialog::Create()来创建无模式对话框窗口, 在上述两种情况之下,对话框对象先初始化,然后创建对话框以及它的控 件。 类CDialog成员函数Create()使用两种重载原形,最常用的一种如下: Create(UINT nIDTemplate, CWnd * pParentWnd=NULL); 其中,参数nIDTemplate是一个对话框模板的标识符, 参数pParentWnd是对话框所属的父窗口。
组合框
组合框(Combo Box)窗口是由一个输入框和一个列表 框组成的。创建一个组合窗口可以使用成员函数: BOOL CListBox::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff );
有模式对话框
对话框是大多数Windows应用程序的重要的用户界面组 件。在Windows开发中弹出对话框是一种常用的I/O手段,我 们需要将一个自建并编辑好的对话框保存在Visual C++应用工 程的资源文件中。Visual C++提供了对话框编辑工具,我们利 用编辑工具可以方便的添加各种控件到对话框中去,而且利 用ClassWizard可以方便的生成新的对话框类和映射消息。我 们可以用对话框资源编辑器创建对话框模板,对话框资源编 辑器将编辑的模板以扩展名.res文件保存在对话框模板资源中。 然后基于对话框的模板用ClassWizard创建一个从CDialog 类 派生的对话框类,最后建立该类对象,建立对话框。
静态文本控件
静态文本控件的功能比较简单,可作为显示字符串、图标、位图 用。创建一个窗口可以使用成员函数: BOOL CStatic::Create( LPCTSTR lpszText, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0xffff ); 其中,dwStyle将指明该窗口的风格,除了子窗口常用的风格 WS_CHILD,WS_VISIBLE外,我们可以针对静态控件指明专门的风格。 SS_CENTER,SS_LEFT,SS_RIGHT 指明字符显示的对齐方式。 SS_GRAYRECT 显示一个灰色的矩形 SS_NOPREFIX 如果指明该风格,对于字符&将直接显示,否则 &将作为转义符,&将不显示而在其后的字符将有下划线,如果需要 直接显示&必须使用&&表示。 SS_BITMAP 显示位图 SS_ICON 显示图标 SS_CENTERIMAGE 图象居中显示 利用成员函数SetWindowText 设置控件显示的文本GetWindowText 得 到控件当前显示的文本,利用成员函数SetIcon设置控件显示的图标 GetIcon得到控件当前显示的图标,利用成员函数SetBitmap 设置控 件显示的位图,GetBitmap得到控件当前显示的位图。