版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第5章 常用控件介绍,控件是Windows应用程序的图形界面的重要组成部分,用户可以通过控件完成与应用程序的交互。控件其实在MFC中是对数据和方法的封装,当然控件就有自己的属性和方法。在MFC中,所有的控件都是由CWnd类派生来的,所以控件可以作为对话框的子窗口而创建。本章以对话框程序为基础介绍一些基本和常用的控件,学习掌握Windows控件一般的使用方法和步骤。,5.1 Button按钮,Button按钮是在Windows应用程序中最常见的控件之一。如确定、取消、QQ登录,Button按钮无处不在。这一节中主要介绍Button按钮的添加,利用其控件变量和消息响应函数来完成应用程序的操作。,5
2、.1.1 创建一个“打开”按钮,利用第4章所述方法,创建一个项目名为Test1的对话框应用程序。为对话框拖一个ID为IDC_BUTTON_OPEN,Caption为“打开”的Button按钮。同时删除对话框中间的静态文本“TODO: 在这里设置对话框控制”。,1.“打开”按钮的位置 经过上述操作后,对话框上出现了一个“打开”按钮。编译运行该项目后,系统会在两处修改代码。 (单击“解决方案视图”选项卡,打开“Resource.h”文件。代码如图:,5.1.2 手工添加一个按钮,我们在对话框上拖一个按钮后,用户不仅看到对话框上多了一个按钮,并且可以在“资源视图”中可视化查看该按钮的形状、属性等。现
3、在我们手工添加一个关闭按钮帮助大家明白Windows是怎样管理资源的。,从图看出,IDC_BUTTON_OPEN的ID值为:1000。 (2)打开项目文件夹,以记事本的方式打开文件Test1.rc。 可以看到,刚拖动到对话框上的按钮类型为PUSHBUTTON, Caption为“打开”,ID名为:IDC_BUTTON_OPEN 坐标为(129,83),大小为(50,14)。 2、手动创建一个“关闭”按钮 可以看到用拖动方式创建“打开”按钮,引发系统在两个地方修改了程序文件,所以我们手动添加一个按钮也应该在这两个地方添加相应的代码。 (1)在Resource.h文件中为Close(关闭)按钮宏定
4、义一个ID。ID的范围为065535,其中较小的值已被预定义,需谨慎使用。修改后的代码如下:,Resource.h中注册资源ID #define IDC_BUTTON_CLOSE 1001 这里定义为IDC_BUTTON_CLOSE,表示这是一个ID控件 (IDControl),类型为BUTTON,有CLOSE(关闭)的作用。 (2)在Test1.rc中添加ID为IDC_BUTTON_CLOSE的Button按钮,其坐标为(129,60),尺寸为(50,14)。 编译运行后,结果为:,5.1.3 为按钮添加控件变量,Button按钮可以看成是一个小的窗体,用所关联的变量就可以调用CButton
5、类中提供的方法对按钮进行各种操作。 用4.3.2节添加关联变量的方法为两个按钮添加名为m_btnOpen、m_btnClose,类型为Control(控件类型)的CBotton类型对象。由于Botton按钮只能关联控件变量,所以没有Value型这一项。添加完后的结果为: (1)在CTest1Dlg.h中定义变量,(2)数据交换函数中进行变量的关联,5.1.4 编写一个按钮程序,这一小节通过编写一个小的按钮程序说明控件变量是怎样调用类中封装方法对来实现一些功能的。因为CButton类是CWnd的派生类,所以CButton对象也可以调用CWnd类中的方法。这个小程序用到的方法是CWnd:Enabl
6、eWindow()。EnableWindow()方法可以使按钮失效,即不接受键盘和鼠标的操作。在Windows程序中经常会见到有的按钮是灰色的无法单击。,最后的程序要实现,初始状态“打开”按钮可用,“关闭”按钮不可用。单击“打开”按钮弹出对话框提示“以打开”,之后“打开”按钮不可用。单击“关闭”按钮,弹出对话框提示“已关闭”,恢复初始状态。,1、定义一个BOOL型标记变量 因为程序要实现关闭打开轮流操作,所以需要一个变量标记当前状态是打开还是关闭。我们选择BOOL变量来表示,TRUE为“打开”可用,FALSE为“关闭”可用。下面在对话框类声明中定义一个名为m_bOpen的BOOL型变量,并在构
7、造函数中初始化为TRUE。代码如下: (1)在类声明中定义 class CTest1Dlg : public CDialog . BOOL m_bOpen; . (2)构造函数中进行初始化 CTest1Dlg:CTest1Dlg(CWnd* pParent /*=NULL*/) : CDialog(CTest1Dlg:IDD, pParent) . m_bOpen = TRUE; . ,2、添加消息响应函数 为两个按钮添加BN_CLICKED消息响应函数后,代码如下。 (1)消息响应函数的声明,(2)消息响应映射表,(3)消息响应函数,(2)当Botton对象调用EnableWindows()
8、方法时,如果传入值为TRUE则按钮可用,FALSE为按钮不可用。下面为消息响应函数加入如下代码。,3、实现功能 在初始化对话框时,设计初始界面为“打开”按钮可用,“关闭”按钮不可用。 (1)初始化对话框时,调用OnInitDialog()函数,5.2 Edit编辑框控件,Edit编辑框控件也是Windows程序中最常见的一个控件之一。例如,你要登陆QQ得先输入账号和密码,而编辑框正是接收账号和密码的载体。掌握编辑框的常用操作是学习VC+必不可少的一步。这一节主要介绍编辑框与变量之间的数据交换、用Edit控件类型的变量来对编辑框进行直接操作和设置编辑框为密码输入。,5.2.1 创建两个Edit控
9、件,创建一个项目名为Test2的对话框应用程序,拖动两个Edit控件到上面。我们将通过VC+可视化开发环境修改其属性类型,并查看代码的相应变化。 账号:ID:IDC_EDIT_ID 密码:ID:IDC_EDIT_PASSWORD Password,1、完善界面 添加两个静态文本控件和一个按钮。把静态文本的Caption分别修改为“账号”和“密码”,将按钮的ID设为IDC_BUTTON_LOG,Caption设为“登陆”。然后选中“确定”和“取消”按钮将其删除。,5.2.2 编写一个登陆界面程序,利用上面添加的两个编辑框控件,设计一个登陆界面,用弹出对话框形式获得登陆的账号和密码。单击“登陆”按
10、钮后。,2、添加控件关联变量和消息响应函数 为两个编辑框控件添加两个关联变量m_strID和m_strPaswrd,值类型为CString。为“登陆”按钮添加消息响应函数CTestDlg:OnButtonLog()。,3、在消息响应函数中添加代码,5.3 单选按钮,使用单选按钮(Radio Button)从一组选项中选择唯一一个选项,当我们在填写表格时经常会用到。例如,在一组职业中选择你的职业等。本节讲解单选按钮最常用的操作及一些特点。,5.3.1 单选按钮的特点及其应用,单选按钮(Radio Button)不同于前面讲的那些控件,它有自己一套独特的操作方式。单选按钮通常以组的方式呈现,在组中
11、选择符合要求的那个选项。,1、单选按钮的分组设置 单选按钮在使用的时候需要进行相应的分组。分组需要在控件的属性对话框中设置。设置的时候,只要将第一个按钮的Group属性选中,后续单选按钮不选择属性即可。 (1)建立3个单选按钮,分别为“教师”,“医生”,“司机”。其ID号为: IDC_RADIO_TEACHER IDC_RADIO_DOC IDC_RADIO_DRIVER (2)设置“教师”按钮的Group属性为:TRUE,(3)从第一个被选中Group属性的但选按钮开始,到出现其他被选择该属性的单选按钮之前,所有的该类控件都被归为一组。按下Ctrl+D后,设计界面会显示控件的顺序。 2、为一
12、组单选按钮添加关联变量 为”教师“按钮关联一个int值类型的变量,就可以知道用户选择的是哪个单选按钮了。,5.3.2 单选框按钮例子,下面举个单选框的小例子,实现单击“查询”按钮弹出用户所选择的职业。,1、控件及其属性设置情况,2、为“教师”按钮关联一个值类型的整型变量m_intProfs,同时双击“查询“按钮添加相应的消息响应函数。,5.4 复选框按钮,复选框按钮(Check Box)也是Windows提供的又一种很常见的按钮。但是使用的时候不需要像单选按钮那样进行分组。可以使用复选按钮,从一组选项中选择一个选项或多个选项,各个选项之间的选中状态互不相关。本节也只介绍复选框最常用的操作,其它
13、一些属性或控件类型变量的使用可根据前几节介绍的方法自己尝试或查看相应的帮助文档。,5.4.1 复选框按钮简介,有些选择是多项的,例如,你喜欢的蔬菜有哪些,而像性别这样的选项就只能选一个。可以利用上一节所介绍的单选框来处理单项选择问题,还有很多时候我们需要利用复选框来解决多项选择的问题。 和单选按钮一样,我们通常把类型相同的选项用组框来作为标示。用ClassWizard可以为每一个复选框按钮关联一个值类型变量用作数据交换使用,该变量是BOOL型,值为TRUE时表示选中了该复选框,值为FALSE时表示没有选中该复选框。,5.4.2 复选框按钮例子,下面通过一个小例子来说明复选框的基本使用。实现单击
14、“查询”按钮弹出一个消息对话框,显示您所喜欢的蔬菜。,1、控件及其属性设置,2、为复选框关联BOOL值类型的变量,并为”查询“按钮添加消息响应函数。,、”查询“按钮添加消息响应函数,5.5 列表框,如果需要从多个数据中进行选择,可以使用列表框(List Box)实现。使用列表框不仅可以从已有的数据中进行选择,还可以很方便地实现动态添加和删除数据。这一节主要介绍列表框的一些基本属性和常用的操作方法。,5.5.1 列表框的属性和方法,列表框控件在使用的时候需要注意一些基本属性的设置,如果想灵活使用列表框还需要了解它的一些常用的方法使用。 1、一些需要注意的属性 (1)选择Sort后,列表框中的数据
15、会自动排序。 (2)选择Vertical scroll可实现在数据多时添加垂直滚动条 (3)选择Notify即可接收通告消息。,2、列表框控件常用方法为列表框关联一个控件类型的变量,可以利用这个变量来调用列表框控件类里面的方法。,5.5.2 列表框例子,下面举例说明列表框的使用,实现动态创建和删除元素,选中一个元素弹出对话框给予提示。,第一步:创建一个名为6的对话框应用程序,添加相应的控件如图。 控件及其属性设置情况,、为列表框和编辑框添加相应的关联变量。注意列表框变量为控件类型,编辑框变量为值类型。 (1)列表框控件ID: 类别:Control 变量类型:CListBox 变量名:m_lis
16、tAddr (2)辑框控件ID: 类别:Value变量类型:CSting 变量名:m_strTemp,3、分别双击列表框、“添加”按钮和“删除”按钮,为控件添加相应的响应函数。 /“添加”按钮消息响应函数,/“删除”按钮消息响应函数,/列表框消息响应函数,5.6 组合框,组合框在Windows中很常见,打开浏览器可以看到地址栏其实就是一个组合框,它既可以输入地址又可以点击右边的向下小箭头选择曾经浏览过的网页。,5.6.1 组合框的属性和常用方法,可以把组合框(Combo Box)看成是编辑框和列表框的叠加,它既具有编辑框输入数据的功能,又可以点击下拉箭头进行选择。下面就组合框的一些常用属性和方
17、法进行介绍。,1、组合框的3种类型及Data属性 我们可以通过组合框属性中的数据选项卡为其添加固有的属性。 Dropdown:既可以单击下拉箭头在列表中选择,也可以在下拉列表中输入文本,DropList:只能通过下拉列表选择。,2、组合框控件类的一些方法 同列表框一样,通过关联控件变量,来调用组合框控件CComboBox类的方法进行操作。 组合框CComboBox类方法,5.6.2 组合框例子,这一小节我们将编写一个模拟浏览器地址栏,且包含输入信息历史记录的小程序,让读者对组合框及控件调用类方法有更进一步认识。实现功能流程如下图所示。,1、创建一个名为Test7的对话框应用程序,添加相应的控件
18、。 (1)控件及其属性设置情况,(2)编辑框属性设置为多行(Multiline),不自动横向滚动(Auto HScroll)和只读模式(Read Only)。,(3)将Button按钮属性中的Default button选中,此时按下Enter键相当于单击此按钮。,2、为控件关联变量,3、为按钮和组合框添加消息响应函数 (1)为按钮添加消息响应函数,(2)为组合框添加消息响应函数,在Ctest7Dlg:OnBnClickedButtonEnter()添加代码,在Ctest7Dlg:OnCbnSelchangeComboAddr()中添加代码如下:,5.7 列表视图控件,在5.5节讲过列表框,列
19、表视图可以当做是功能增强型的列表框。列表视图控件可以很好的用来显示项目元素,在编写数据库软件时也经常会用到。在Windows系统中文件夹目录也是以列表视图呈现。,5.7.1 列表视图的四种基本样式,列表视图控件(List Control)在属性中提供了四种基本的样式可供选择,Icon(图标)、Small Icon(小图标)、List(列表)、Repor(报表)。,5.7.2 列表视图控件例子,这一小节我们利用列表视图写一个记录员工信息的小程序,实现添加、删除员工信息的功能。,CListCtrl类的一些方法,首先创建名为test8的对话框应用程序。按照下图添加相应的控件,设置列表框视图属性Vie
20、w为Report类型。,控件及其属性设置,控件关联变量,在使用列表视图控件的时候就已经确定了需要显示的列数,所以只需做一些初始化工作。在Ctest8Dlg:OnInitDialog()中添加初始化代码。,为“添加”按钮添加消息响应函数代码:,5.8 树形视图,树形视图控件(Tree Control)是Windows系统中最常见的控件之一,用于显示具有一定层次结构的数据信息。Windows资源管理器就是典型应用树形视图的例子。,为“删除”按钮添加消息响应函数代码: void Ctest8Dlg:OnBnClickedButtonDelete() / TODO: 在此添加控件通知处理程序代码 in
21、t index = m_listCtrl.GetNextItem(-1, LVNI_SELECTED); / 得到所选元素项的索引值 m_listCtrl.DeleteItem(index); / 删除被选中的元素项 ,5.8.1 树形视图的属性,树形视图在使用时候会比较复杂些,这里简单介绍怎样构建一个树形结构和树形视图的3个常选的属性Has bottons、Has lines、Lines at root。,5.8.2 树形视图例子,这一小节写一个树形控件的例子,实现简单显示地区树形结构。,创建一个项目名为test9的对话框应用程序,为其拖出一个树形控件(Tree Contrl)。设置其ID为: IDC_TREE_AREA,并选中Has botton,Has lines和Lines At Root3个属性。,为树形控件关联名为m_treeArea的控件类型变量,并在对话框初始化函数 CTest9Dlg:OnInitDialog()中添加如下代码: BOOL Ctest9Dlg:OnInitDialog() CDialog:OnInitDialog(); . / TODO: 在此添加额外的初始化代码 HTREEITEM hRoot, hItem; hRoot = m_treeArea.Inser
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论