已阅读5页,还剩66页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
版权所有 复制必究 对话框是Windows应用程序中一种常用的 资源,其主要功能是输出信息和接收用户的输 入数据。控件是嵌入在对话框中或其它父窗口 中的一个特殊的小窗口,它用于完成不同的输 入、输出功能。 对话框与控件关系密切,在每个对话框上 一般都有一些控件,对话框依靠这些控件与用 户进行信息的交互。本章主要介绍对话框的工 作原理和编程方法,并通过实例学习一些标准 控件和公共控件的使用方法。 6.1 对话框概述 l就用户交互输入功能而言,菜单和工具栏的功 能是极其有限的。而对话框除了用来显示提示 信息(如程序启动时显示版权和运行进度信息), 一个主要功能是用于接收用户的输入数据。 l在MFC中,对话框的功能被封装在CDialog类中 ,而CDialog类是CWnd类的派生类。作为窗口 ,对话框和其它窗口一样具有窗口的一切功能 。 l对话框的一个典型应用是通过菜单命令或工具 栏按钮打开一个对话框,当然,对话框也可以 作为一个程序的主界面。 6.1.1 基于对话框的应用程序 l可以直接利用MFC AppWizard向导创建一个基于 对话框的应用程序,这种程序运行后首先出现一个 对话框。在向导的第一步选择Dialog Based项。此时 ,应用程序向导将出现与单文档和多文档程序向导 不同的操作步骤,因为对话框应用程序一般不包含 文档,故不支持数据库和复合文档。 l按照对话框应用程序向导提示的步骤进行操作就 得到一个对话框应用程序项目,出现对话框编辑器 和控件工具栏浮动窗口,它们采用的是一种所见即 所得的可视化工作方式。利用向导创建应用程序的 框架后,程序员可根据程序具体功能要求添加代码 。 例 编写一个对话框应用程序MyDialog,程序运行 后显示一个对话框,并在对话框上显示文本串。 1执行File|New命令出现New对话框,选择MFC AppWizardexe项,输入程序名MyDialog,单击 OK按钮。在随后出现的MFC AppWizard-Step 1对 话框窗口中选择Dialog Based选项,单击Finish按钮 就创建了应用程序项目,并在Developer Studio中 打开了对话框编辑器和控件工具栏。 2去掉对话框中标题为“TODO: 在这里设置对话 控制”的静态文本控件,调整对话框大小,在成员 函数CMyDialogDlg:OnPaint()中添加代码。 void CMyDialogDlg:OnPaint() . . . . . . else CPaintDC dc(this); dc.SetBkMode(TRANSPARENT); dc.TextOut(20, 50, “这是一个对话框应用程序!“); CDialog:OnPaint(); 6.1.2 对话框类CDialog MFC提供了一系列对话框类,并实现了对话框 消息响应和处理机制。CDialog类是对话框类中最 重要的类,我们在程序中创建的对话框类一般都是 CDialog类的派生类。CDialog类还是其它所有对话 框类的基类,其派生关系如下所示: CObject CCmdTarget CWnd CDialog 对话框类为程序员提供了管理对话框的编程接 口。 CDialog类从CWnd类派生而来,所以它继承 了CWnd类的成员函数,具有CWnd类的基本功能 ,可以编写代码移动、显示或隐藏对话框,并能根 据对话框的特点增加新的成员函数,扩展它的功能 。在你的CDialog类的派生类中可以直接调用 CDialog类的成员函数。大部分的成员函数是虚函 数,可以在你的派生类中重载,以实现特定的目的 。除了CDialog类成员函数,类CWnd和CWinApp也 提供了一些成员函数用于对话框的管理。 有关对话框的常用处理函数 CDialog:CDialog() 通过调用派生类构造函数,根据对话框资源模板定义一 个对话框。 CDialog:DoModal() 激活模态对话框,显示对话框窗口。 CDialog:Create() 根据对话框资源模板创建非模态对话框窗口。如果对话 框不是Visible属性,还需通过调用CWnd:ShowWindow()函 数显示非模态对话框窗口。 CDialog:OnOk() 单击OK按钮时调用该函数,接收对话框输入数据,关 闭对话框。 CDialog:OnCancel() 单击Cancel按钮或按Esc键时调用该函数,不接收对话框 输入数据,关闭对话框。 CDialog:OnInitDialog() WM_INITDIALOG消息处理函数,在调用DoModal或 Create函数时系统发送WM_INITDIALOG消息,在显示对话框 前调用该函数进行初始化。 CDialog:EndDialog() 用于关闭模态对话框窗口。 CWnd:ShowWindow() 显示或隐藏对话框窗口 CWnd:DestroyWindow() 关闭并销毁非模态对话框 CWnd:UpdateData() 通过调用DoDataExchange()设置或获取对话框控件的数据 CWnd:DoDataExchange() 被UpdateData()调用以实现对话框数据交换,不能直接调 用。 CWnd:GetWindowText() 获取对话框窗口的标题 CWnd:SetWindowText() 修改对话框窗口的标题 CWnd:GetDlgItemText() 获取对话框中控件的文本内容 CWnd:SetDlgItemText() 设置对话框中控件的文本内容 CWnd:GetDlgItem() 获取控件或子窗口的指针 CWnd:MoveWindow() 用于移动对话框窗口 CWnd:EnableWindow() 使窗口处于禁用或可用状态 6.1.3 对话框数据交换DDX和验证DDV l在对话框中实现用户数据输入和输出的一般 方法是通过ClassWizard类向导将对话框控件 与成员变量相关联,利用对话框数据交换DDX (Dialog Data Exchange)和验证DDV(Dialog Data Validation)机制实现数据的输入和输出 。 l当利用ClassWizard类向导添加成员变量时, 用户如果在窗口的左下角输入数据的范围, ClassWizard将自动加入函数DDV的调用代码。 例如,当添加一个UINT型的成员变量m_nInput 时指定它的最小值和最大值分别为0和100,则 ClassWizard类向导将在成员函数DoDataExchange() 中添加以下DDV函数的调用语句: DDV_MinMaxUInt(pDX, m_nInput, 0, 100); 程序运行后,如果用户的输入数据超出0100 的范围,DDV将显示一个提示信息对话框(例7-2c ),提示用户有效的输入范围。 UpdateData()的用法: 当调用UpdateData(TRUE)时,MFC通过调用 DDX函数将数据从控件传递到关联的成员变量; 当调用UpdateData(FALSE)时,MFC通过调用 DDX函数将数据从成员变量传递到关联的的控件 。利用UpdateData()函数实现了在刷新后重新获取 成员变量。 注意: 表面上看程序并没有调用UpdateData(),但是, 当程序调用CDialog:DoModal()创建并显示对话框时 ,将自动调用CDialog:OnInitDialog()完成初始化的工 作。在OnInitDialog()中调用了UpdateData(FALSE), 将数据从成员变量传递到关联的控件,从而显示在控 件中。而单击OK按钮将调用CDialog:OnOk()函数, 在OnOK()中调用了UpdateData(TRUE),将数据从控 件传递到关联的成员变量。 由此看来,不管MFC将DDX技术如何复杂化, 我们只需知道,DDX就如同一条双向通道,而方向 控制开关就是UpdateData()函数中的BOOL类型参数 是TRUE还是FALSE。 6.1.4 提示信息对话框 提示信息对话框也称消息对话框,用来显示有 关的提示信息。提示信息对话框是一种最简单的对 话框,不需要用户自己创建它就可以直接使用, Visual C+提供了相应的函数实现这样的功能。: int AfxMessageBox(LPCTSTR lpText, UINT nType=MB_OK, UINT nlDHelp=0); int MessageBox(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT nType); int CWnd:MessageBox(LPCTSTR lpText, LPCTSTR lpCaption=NULL, UINT nType=MB_OK); 这三个函数分别是MFC全局函数、API函数和 CWnd类的成员函数,它们的功能基本相同,但适用 范围有所不同。AfxMessageBox()和:MessageBox()可 以在程序中任何地方使用,而CWnd:MessageBox() 只能用于控件、对话框、窗口等一些窗口类中。 例如,在软件安装过程中为了弹出如下图所示 的警告提示信息对话框并进行相应的处理: 编写的代码如下: int nChoice=MessageBox(“文件复制失败!“, “错误“, MB_ICONWARNING | MB_ABORTRETRYIGNORE ); switch(nChoice) case IDABORT: / 用户按下“终止“按钮 . . . . . . caseIDRETRY: / 用户按下“重试“按钮 . . . . . . case IDIGNORE: / 用户按下“忽略“按钮 . . . . . . 6.2 使用对话框 为了在屏幕上显示对话框: (1)首先需要建立对话框资源及其与资源相 关的对话框类; (2)然后添加控件、与控件关联的成员变量 和消息处理函数; (3)最后在程序中显示对话框并访问与控件 关联的成员变量。 在Visual C+中可以利用集成工具如对话框 编辑器和ClassWizard类向导很方便地创建对话框 ,不需要程序员手工编写太多的源代码。 6.2.1 一般对话框工作流程 l当定义了一个对话框类后,就可以利用这个对话 框类声明一个对话框对象,即一个能够在屏幕上显 示的对话框。 l声明了一个对话框对象后,可以调用对话框类的 成员函数DoModal()建立对话框窗口并显示对话框 。例如,假设定义了一个名为CMyDialog的对话框 类,为了在屏幕上显示一个对话框,可以编写如下 代码: CMyDialog myDlg; myDlg.DoModal(); 函数OnOK()、 OnCancel()与DoModal()的关系: 对话框中一般都有OK和Cancel按钮,单击OK 按钮时调用CDialog:OnOK()函数,单击Cancel按钮 时调用CDialog:OnCancel()函数。OnOK()函数和 OnCancal()函数都将结束DoModal()函数调用,但 令DoModal()返回不同的值。OnOK()函数令 DoModal()返回IDOK,OnCancel()函数令 DoModal()返回IDCANCAL。用户可以根据 DoModal()的返回值做出不同的选择。如: if (myDlg.DoModal() = = IDOK ) 对话框的初始化可以在三个不同的阶段所调用 的函数中进行: (1)对话框类构造函数; (2)WM_CREATE消息处理函数; (3)WM_INITDIALOG消息处理函数。 通常是在消息WM_INITDIALOG的消息处理函 数OnInitDialog()中进行初始化。在收到WM_INIT- DIALOG消息时,对话框的框架已创建,对话框中的 每个控件也已建立起来,但它们还没有在屏幕上显 示。此时自然可以设置或优化对话框中各个控件的 外观、尺寸、位置以及其它属性。函数 OnInitDialog()将被成员函数DoModal()调用。 6.2.2 创建对话框 在Windows中对话框是作为一种资源被使用, 在程序中要创建一个对话框,首先要创建一个对话 框模板资源,然后创建一个基于该对话框模板资源 的对话框类。对话框模板资源指定了对话框本身的 属性(如大小、位置、风格、类型等)和对话框中 的控件及属性,而对话框类规定了对话框和对话框 中每个控件的行为。通过对话框模板资源才能创建 对话框类和对象。 为了向应用程序项目中添加一个对话框资源, 执行Insert|Resource命令或直接按Ctrl+R键,弹出 Insert Resource资源列表框。一般要加入通用对话 框资源,所以在Insert Resource框中直接选择Dialog 项,然后单击New按钮。系统将给对话框资源设置 一个默认的ID标识,对话框的默认标题Caption为 Dialog,对话框有OK和Cancel两个按钮。 对话框资源的添加: 添加对话框资源的简单方法 : 在项目工作区鼠标右击资源项Dialog,从弹出 式菜单中选择“Insert Dialog”命令项。 对话框是在对话框模板资源和对话框类的基 础上形成的,在完成了对话框的属性和外观设计 后,再来设计对话框的行为。我们需要利用 ClassWizard类向导创建一个对话框类,并将这 个类同先前创建的对话框资源连接起来。在创建 对话框类之前或之后,都可以为对话框资源添加 控件。而在创建对话框类之后,还可以为对话框 资源添加与对话框控件相关联的成员变量和消息 处理函数。 创建对话框类: 如果按Ctrl+W键或在对话框资源的非控件区域 双击鼠标,ClassWizard类向导将发现已添加了一个 对话框模板资源,却没有设计其对应的类,因此将 弹出Adding a Class对话框,询问用户是否需要利用 该对话框资源创建一个对话框类。 lName框:用于输入对话框类的名称; lFile Name框:列出类的文件名,单击Change按 钮可改变文件名; lBase class下拉框:列出可选择的基类; lDialog ID下拉框:列出可选择对话框资源的ID 。 例 假设已利用MFC AppWizard应用程序向导建 立了一个名为Mysdi的单文档应用程序,请向应用 程序中添加对话框资源和对话框类。 在Adding a Class对话框单击OK按钮,弹出New Class对话框: 1首先向应用程序项目添加一个对话框资源,在 项目工作区鼠标右击资源项Dialog,从弹出式菜单 中执行Insert Dialog命令,插入一个对话框资源。 2设置对话框的属性,将光标指向对话框的空白 位置,单击鼠标右键,从弹出式菜单中选择 Properties项,或直接按Enter键,弹出Dialog Properties属性对话框。该对话框包括General、 Styles、More Styles、Extended Styles、More Extended Styles等页面,用于设置对话框多种不同 的属性。 3创建对话框类,鼠标双击对话框资源的非控件 区域。 6.2.3 添加控件及关联的成员变量 l如果没有控件,对话框完成不了什么具体功能, 对话框与控件有着密不可分的关系。结合对话框 编辑器,利用Controls控件工具栏可给当前正在编 辑的对话框模板资源添加控件。 l若Visual C+窗口中没有出现Controls工具栏, 只需将光标指向菜单栏并单击鼠标右键,从弹出 式菜单中选择Controls项。 l控件工具栏上的每一个图标都代表了一种控件, 如果不能确定控件的类型,只要将光标在该控件 图标上停留片刻,就会显示该控件类型的提示。 向对话框添加控件时,先在Controls工具栏单 击要添加的控件,再将光标指向对话框空白区域 并单击鼠标。 添加与控件关联的成员变量 在生成自己的对话框类并添加需要的控件后 ,可以利用ClassWizard类向导在对话框类的定义 中为对话框资源上的每一个控件添加一个或多个 对应的成员变量。ClassWizard类向导的Member Variables页面主要用来为对话框类添加和删除与 对话框控件关联的成员变量,我们在编写对话框 程序时经常同该页面打交道。 lClass name下拉框:选择要添加成员变量的对话 框类; lControl IDs栏:选择控件,因为要添加的成员变 量总是与一个对话框控件ID联系在一起,它们代表 控件对象本身或控件的某项属性; lAdd Variable按钮:添加与控件关联的成员变量; lDelete Variable按钮:删除控件的某个成员变量。 lControl IDs栏:列出对话框资源上已有的控件, 第1列Control IDs表示控件的ID,第2列Type表示变 量的类型,第3列Member表示成员变量名。 在Member Variables页面: Add Member Variable对话框 lMember variable name框:输入成员变量名; lCategory下拉框:选择成员变量的类别,可为Control或 Value; lVariable type下拉框:选择成员变量的类型。 l如果在Category下拉框选择Value项,表示要为 该控件的某项属性定义一个变量,这意味着程序 关心的是控件中的值,而不是控件对象本身。这 时,还可以通过Variable type下拉框为变量选择 不同的类型,可以选择一般的C+数据类型或 Visual C+自定义的数据类型。 l例如,对于编辑框控件,此时成员变量的类型 可以是int、float、long、BOOL等C+一般数据类 型或者是UINT、CString等Visual C+自定义数据 类型。 l如果在Category下拉框中选择Control项,则表示 定义的变量代表控件对象本身, Control类别的变 量实质是一个控件对象,其类型是MFC控件类。 l例如,对于编辑框控件,此时成员变量的类型为 CEdit。因此,可以通过添加的控件对象访问控件 类的成员变量和调用控件类的成员函数,实现对控 件行为的控制和管理。 l可以为一个控件同时定义一个Control类别的变量 和一个Value类别的变量。这些变量都是作为对话 框派生类的成员变量,为了在程序其它地方能够 直接访问添加的成员变量,它们都被声明为 public属性。 例 完善Mysdi程序,向对话框资源添加需要使用的 控件,并添加与控件关联的成员变量。 1向对话框资源添加控件。添加一个静态文本控件,其 Caption为“请输入半径”。添加一个Edit Box编辑框控件,其 ID标识为IDC_EDIT_ RADIUS,该控件用于接收用户的输入 数据。 2添加与控件关联的成员变量。按Ctrl+W键启动 ClassWizard类向导,单击Member Variables标签。在Class name下拉框选择类CRadiusDialog,在Control IDs栏选择编辑 框IDC_EDIT_RADIUS,单击Add Variable按钮。通过Add Member Variable对话框添加成员变量m_nRadius,其数据类 型为UINT。 3使用对话框数据验证DDV功能,在该页面的左下角输入 成员变量m_nRadius的最小值5和最大值250。 例 完善Mysdi程序,通过“编辑”菜单中的“输入半 径(I)”命令打开上述标题为“输入半径”的对话框 ,并根据输入的半径画一个圆。 1为了在视图对象中接收并存储对话框编辑控件的值,在 视图类CMysdiView中手工定义一个UINT类型的成员变量 m_nCViewRadius。 2利用菜单编辑器在“编辑”菜单增加一个菜单项“输入半径 (I)”,其ID标识为ID_EDIT_INPUTRADIUS,Caption为“ 输入半径( / 定义一个对话框对象 dlg.m_nRadius=100;/ 设置编辑框显示的初始值 if (dlg.DoModal()=IDOK) / 显示对话框 m_nCViewRadius=dlg.m_nRadius; / 接收并存储编辑框数据 Invalidate(); / 刷新视图 3在视图类构造函数CMysdiView:CMysdiView() 中将成员变量m_nCViewRadius初始化为0。在函数 CMysdiView:OnDraw()中添加如下画圆的语句: pDC-Ellipse(0, 0, 2*m_nCViewRadius, 2*m_nCViewRadius); 在视图类实现文件MysdiView.cpp的开始位置加 入包含对话框类头文件的语句: #include “RadiusDialog.h” 6.3 标准控件 lWindows提供的控件分为两类:标准控件和 公共控件。 l标准控件:静态控件、编辑框、按钮、列表 框、组合框和滚动条等。利用标准控件可满足 大部分用户界面程序设计的要求。 l公共控件:滑块、进度条、列表视控件、树 视控件和标签控件等,利用公共控件实现应用 程序用户界面风格的多样性。 6.3.1 控件概述 l控件是Windows提供的完成特定功能的独立小部 件,它使应用程序对话功能的设计更容易完成, 在对话框与用户的交互过程中担任主要角色,用 于完成用户输入和程序运行过程中的输出。 l控件对应一个CWnd派生类的对象,它实际上也 是一个窗口,可以通过调用窗口类的成员函数实 现控件的移动、显示或隐藏、禁用或可用等操作 ,也可以重新设置它们的尺寸和风格等属性。 lMFC以类的形式对标准控件和公共控件进行了 封装,这些类大部分是从CWnd类直接派生而来。 常用的MFC控件类 MFC类控 件 CStatic静态文本、图片控件 CEdit编辑框 CButton按钮、复选框、单选按钮、组框 CComboBox组合框 CListBox列表框 CScrollBar滚动条 CSpinButtonCtrl旋转按钮 CProgressCtrl进度条 CSliderCtrl滑块 CListCtrl列表视控件 常用的MFC控件类 MFC类控 件 CTreeCtrl树视控件 CTabCtrl标签 CAnimateCtrl动画控件 CRichEditCtrl复合编辑框 CDateTimeCtrl日期时间选取器 CMonthCalCtrl日历 CComboBoxEx扩展组合框 CStatusBarCtrl状态条控件 CToolBarCtrl工具条控件 CImageList图像列表 控件通知Notification消息: l用户对控件的操作将引发控件事件,Windows产 生对应的控件通知Notification消息,消息由其父 窗口(如对话框)接收并处理。 l标准控件发送WM_COMMAND控件通知消息, 公共控件一般发送WM_NOTIFY控件通知消息, 有时也发送WM_COMMAND消息。 l通过WM_COMMAND消息参数标识发出消息的 控件和具体的事件,消息参数中包含了控件的ID 标识和通知码(如BN_CLICKED单击按钮事件) 。控件通知码前缀最后一个字母为N。 l程序员不必关心消息具体的发送和接收,只需 利用ClassWizard将控件映射到成员变量,将控件 消息映射到成员函数,然后编写具体的处理代码 。 控件的创建方法: l控件在程序中可作为对话框控件或独立的窗口 两种形式存在,因此,控件的创建方法也有两种 。 l一种方法是在对话框模板资源中指定控件,这 样当应用程序创建对话框时,Windows就会为对 话框创建控件,编程时我们一般都采用这种方法 。 l一种方法是通过调用MFC控件类的成员函数 Create()创建控件,也可以调用API函数 CreateWindow()或CreateWindowEx()创建控件。 l控件也可以用于其它窗口,如在程序视图窗口 显示控件。这时,需要首先声明一个MFC控件类 的对象,然后调用Create()函数创建控件。 6.3.2 控件的组织 1. 添加或删除控件 打开对话框编辑器和控件工具栏,在控件工具 栏中单击要添加的控件,此时,当光标指向对话框 时将变成十字形状,在对话框指定位置处单击鼠标 左键,则该控件被添加到对话框中指定的位置。也 可以将光标指向控件工具栏中的控件,然后按住鼠 标不放,采用鼠标拖曵的方法将控件拖入到对话框 中。 要删除已添加的控件,先单击对话框中的控件 ,再按Delete键即可删除指定的控件。 2. 设置控件属性 将光标指向对话框中需设置属性的控件,按回 车键(或右击鼠标,在弹出式菜单中选择Properties项 )弹出Properties对话框,在Properties对话框中设置控 件属性。可以将属性对话框始终保持打开,只需要 按下属性对话框左上角的图钉按钮。 3. 调整控件的大小 对于静态文本控件,当输入标题内容时,控件 的大小会自动改变。对于其它控件,先单击控件, 然后利用控件周围的尺寸调整点来改变控件的大小 。所选对象的位置和大小将显示在状态栏的右端。 4. 同时选取多个控件 一种方法是在对话框内按住鼠标不放,拖曵出 一个大的虚线框,然后释放鼠标,则被该虚线框所 包围的控件都将被同时选取;另一种方法是按住 Shift(或Ctrl)键不放,然后用鼠标连续选取控件。 5. 移动和复制控件 当单个或多个控件被选取后,按方向键或用鼠 标拖动选择的控件可移动控件。若在鼠标拖动过程 中按住Ctrl键则复制控件,复制的控件保持原来控件 的大小和属性。并且,控件能够通过复制和粘贴操 作而加入到其它对话框中。 6. 编排控件 编排控件主要是指同时调整对话框中一组控件 的大小或位置。编排控件有两种方法,一种方法是 使用控件布局工具栏,自动编排对话框中同时选定 的多个控件;另一种方法是使用Layout菜单,当打 开对话框编辑器时,Layout菜单将出现在菜单栏上 。为了便于用户在对话框内精确定位各个控件,系 统还提供了网格、标尺等辅助功能。 测试对话框和控件的方法: 通过按下Ctrl+T组合键就能测试对话框运行时 的界面效果。 6.3.3 控件共有属性 l控件的属性决定了控件的外观和功能,我们只 有通过控件属性对话框才能设置控件的属性。 l控件属性对话框上有若干选项卡,如General( 通用属性)、Style(风格)及Extend Styles(扩 展风格)选项卡等,其中General页用于设置控件 的通用属性,Styles和Extendcd Styles页用来设置 控件的外观和辅助属性。 l不同控件有不同的属性,但它们都具有通用属 性,如控件标识ID、标题Caption等项, 控件的General属性 项 目说 明 ID 控件的标识,对话框编辑器会为每一个加入的控件分配一个 默认的ID Caption 控件的标题,作为程序执行时在控件位置上显示的文本 Visible 指明显示对话框时该控件是否可见 Group 用于指定一个控件组中的第一个控件 HelpID表示为该控件建立一个上下文相关的帮助标识ID Disabled 指定控件初始化时是否禁用 Tab Stop表示对话框运行后该控件可以通过使用Tab键来获取焦点 6.3.4 静态控件 l静态控件(Static control)是用来显示一个文本 串或图形信息的控件,它包括静态文本控件、图 片控件和组框。 l静态文本控件用来显示一般不需要变化的文本 ;图片控件用来显示边框、矩形、图标或位图等 图形;组框用来显示一个文本标题和一个矩形边 框,通常用来作为一组控件周围的虚拟边界,并 将一组控件组织在一起。 l管理静态文本控件和图片控件的MFC类是 CStatic类,而管理组框的MFC类是CButton类。 l所有静态控件默认的ID标识都为IDC_STATIC ,如果要为一个静态控件添加成员变量或消息处 理函数,必须重新为它指定一个唯一的ID标识。 l编程时用的最多是静态文本控件,它被用来作 为其它控件的标题。每一个静态文本控件最多可 以显示255个字符,可以使用“n”换行符,并可 以通过Styles页面设置控件的风格。 6.3.5 编辑框 l编辑框(Edit box)又称文本框或编辑控件,它 一般与静态文本控件一起使用,用于数据的输入 和输出。编辑框提供了完整的键盘输入和编辑功 能,可以输入各种文本、数字或者口令。 l编辑框为用户提供了良好的输入、输出功能, 能够将键盘输入的字符串转化为要求的数据类型 ,并验证它是否符合输入要求(字符串长度或数 值范围)。通过前述对话框内容的学习我们已经 知道,完成上述工作是利用了MFC提供的对话框 数据交换(DDX)和数据验证(DDV)技术。 l编辑框常用属性: Multiline设置单行或多行编 辑,Align text设置文本对齐方式,Number表示只 能输入数字,Password表示键入编辑框的字符都 将显示为“*”,Uppercase或Lowercase表示键入编 辑框的字符全部转换成大写或小写形式,Read- Only表示只能输出数据。 l当编辑框的文本被修改,会向父窗口发送消息 ,可以利用ClassWizard在对话框类中添加消息处 理函数。编辑框发送消息有:EN_CHANGE、 EN_KILLFOCUS、EN_SETFOCUS、EN_MAX TEXT、EN_UPDATE等。 例 编写一个SDI应用程序Password,程序启动后首 先弹出一个如图所示的用户身份确认对话框,当用 户键入正确的口令后才能进入程序的主界面。 6.3.6 按钮 按钮(Button)包括按键按钮、单选按钮、复 选框和组框等4种类型。虽然封装按钮控件的MFC类 都是CButton类,但它们具有不同的功能。按键按钮 在被按下时会立即执行某个命令,也被称为命令按 钮;单选按钮用于在一组互相排斥的选项中选择其 中一项;复选框用于在一组选项中选择其中一项或 多项;组框可以使一组控件关联起来。 1. 按键按钮 l几乎所有的对话框都使用简单的按键按钮,如 OK按钮。通过Properties对话框可以设置按钮的不 同风格,如通过设置Default button属性设置一个 默认按钮。默认按钮是指当对话框刚显示时的命 令执行按钮,此时按下Enter键将执行该按钮的命 令功能。一个对话框只能有一个Default button默 认按钮,通常情况下将OK按钮设置为默认按钮。 l其它属性:Owner draw利用WM_DRAWITEM消 息处理函数定制按钮的外观,Icon表示用图标代 替原来的文本标题,Bitmap表示用位图代替原来 的文本标题,Client edge、Static edge、Modal frame用于设置按钮的外观。 2. 单选按钮 l单选按钮是由一个圆圈和紧随其后的文本标题 组成,当它被选中时,圆圈中就标上一个黑点。 l单选按钮设置Auto自动属性为默认属性,Auto 属性表示用户若选中同组中的某个单选按钮,则 自动清除其余单选按钮的选中状态,保证一组选 项中始终只有一项被选中。 l一般将一组单选按钮放在一个组框中,在一组 单选按钮中,第一个(Tab键顺序)按钮最重要,其 ID值可用于在对话框中为控件建立关联的成员变 量。必须为同组中的第一个单选按钮设置Group属 性,而同组的其它单选按钮不可再设置Group属性 。 3. 复选框 l复选框是由一个空心方框和紧随其后的文本组 成,当它被选中时,空心方框中就加上一个“”或 “”标记。 l不同于单选按钮,在一组复选框中每次可以同 时选择多项。除了选中和没选中两种状态,复选 框还有第三种状态,此时选中标记显示为暗色, 它表示该项不可以由用户选择。通过设置Tri-state 属性得到这种三态复选框。另外,我们可以通过 设置Push-like属性使单选按钮或复选框具有普通 按钮的外观。 按钮控件发送的消息: l按钮控件只能发送通知码为BN_CLICKED(单 击按钮)和BN_DOUBLECLICKED(双击按钮) 的WM_COMMAND消息,我们经常需要编写按 钮的BN_CLICKED消息处理函数。 lCButton类提供了一些成员函数实现对按钮控 件对象的控制和管理,如利用成员函数 GetCheck()或SetCheck()获取或设置单选按钮或复 选框的当前状态,利用成员函数GetButtonStyle() 或SetButtonStyle()获取或改变按钮控件的风格。 例 编写一个对话框应用程序ColrButn,对话框中有 两个用于选择颜色模式的单选按钮和三个用于选择具 体颜色的复选框,只有在彩色模式下才能选择三种不 同颜色的组合。当用户单击“应用”按钮,对话框右 边的按键按钮将根据选择的颜色实现按钮的自画。 6.3.7 列表框 lWindows提供了几个列表类型控件,如列表框 、组合框、列表视控件和树视控件,其中列表框 是一种最简单的列表类型控件。 l列表框(List box)是一个列出了一些文本项的 窗口,常用来显示类型相同的一系列清单,如文 件、字体和用户等。与复选框类似,用户可以选 择其中一项或多项,但同时列表框中选项的数目 和内容可以动态变化,用户可往列表框中添加或 删除某些选项。 l列表框有单选Single、多选Multiple、扩展多选 Extended、不选None四种风格,在控件Properties 属性对话框的Selection下拉框中设置。 l当列表框中发生了某个事件,列表框就会向其 父窗口发送一条通知消息。列表框常用的通知消 息有:用户双击列表框中的列表
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 燃气轮机值班员岗前操作技能考核试卷含答案
- 兽用生物制品制造工安全理论知识考核试卷含答案
- 蒸呢机挡车工标准化考核试卷含答案
- 煤气净化回收工岗中创新方法考核试卷含答案
- 活性炭生产工达标竞赛考核试卷含答案
- 加氢裂化(处理)装置操作工技术规范测试考核试卷含答案
- 烯烃转换装置操作工安全演练考核试卷含答案
- 化妆品配方师岗前技术突破考核试卷含答案
- 船舶管系工岗位健康知识考核试卷含答案
- 定向研究生录取协议书5篇
- 失眠中医辨证论治课件
- 纪委礼品礼金管理制度
- 电力建设水电工程智慧工地技术规范
- 民事起诉状(机动车交通事故责任纠纷)
- 2025年度房地产行业工会工作计划
- 教师岗位安全培训课件
- 麦粒肿针灸治疗
- 员工宿舍水电代扣协议书(2篇)
- 精读《乌合之众:大众心理研究》学习通超星期末考试答案章节答案2024年
- 2024-2025学年四川成都田家炳中学高一新生入学分班质量检测数学试题【含答案】
- 中国垂体腺瘤外科治疗专家共识(最全版)
评论
0/150
提交评论