第5章 对话框和常用控件

上传人:wjs****19 文档编号:241790071 上传时间:2024-07-24 格式:PPT 页数:77 大小:841.51KB
返回 下载 相关 举报
第5章 对话框和常用控件_第1页
第1页 / 共77页
第5章 对话框和常用控件_第2页
第2页 / 共77页
第5章 对话框和常用控件_第3页
第3页 / 共77页
点击查看更多>>
资源描述
5.1 对话框的使用对话框的使用 5.2 控件的创建和使用方法控件的创建和使用方法 5.3 常用控件常用控件 5.4 通用对话框和消息对话框通用对话框和消息对话框 第第5章对话框和常用控件章对话框和常用控件 1第第5章对话框和常用控件章对话框和常用控件 5.1 对话框的使用对话框的使用 5.2 控件的创建和使用方法控件的创建和使用方法 5.3 常用控件常用控件 5.4 通用对话框和消息对话框通用对话框和消息对话框 25.1对话框的使用对话框的使用(1 of 18)5.1.1 模式和无模式对话框模式和无模式对话框模式对话框模式对话框 u是指当对话框被弹出后,用户必须在对话框中作出相应的是指当对话框被弹出后,用户必须在对话框中作出相应的操作,在退出对话框之前,对话框所在的应用程序不能继操作,在退出对话框之前,对话框所在的应用程序不能继续执行。续执行。无模式对话框无模式对话框 u是指当对话框被弹出后,一直保留在屏幕上,可继续在对是指当对话框被弹出后,一直保留在屏幕上,可继续在对话框所在的应用程序中进行其它操作;需要使用对话框时,话框所在的应用程序中进行其它操作;需要使用对话框时,单击对话框所在的区域即可激活。单击对话框所在的区域即可激活。35.1对话框的使用对话框的使用(2 of 18)5.1.1 模式和无模式对话框模式和无模式对话框上述两种对话框的不同之处:上述两种对话框的不同之处:(创建和退出创建和退出)u创建时,创建时,模式对话框模式对话框由系统自动分配内存空间,而由系统自动分配内存空间,而无模式无模式对话框对话框需要用户来指定内存。需要用户来指定内存。u退出时,两种对话框所使用的终止函数不一样。退出时,两种对话框所使用的终止函数不一样。模式对话模式对话框框通过调用通过调用CDialog:EndDialog来终止;而来终止;而无模式对无模式对话框话框则是调用则是调用CWnd:DestroyWindow来终止。来终止。45.1对话框的使用对话框的使用(3 of 18)5.1.2 创建对话框创建对话框步骤:单击步骤:单击“Insert”“Resource”,在弹出的对话在弹出的对话框中选择框中选择“Dialog”,然后单击然后单击“New”,就会新建一个就会新建一个对话框。对话框。55.1对话框的使用对话框的使用(4 of 18)5.1.3 使用对话框编辑器使用对话框编辑器 打开对话框编辑器打开对话框编辑器 将项目工作区窗口切换到将项目工作区窗口切换到ResourceView页面,双击页面,双击Dialog目目录下任意一个对话框录下任意一个对话框ID。图图5.1 5.1 打开的对话框编辑器打开的对话框编辑器控件工具栏控件工具栏布局工具栏布局工具栏默认对话框默认对话框资源资源IDID号号默认对话框默认对话框模板模板基准线基准线标尺标尺65.1对话框的使用对话框的使用(5 of 18)在对话框编辑器中添加和编辑控件在对话框编辑器中添加和编辑控件(1)控件添加的方法控件添加的方法u在控件工具栏中单击某控件,鼠标箭头在对话框内变在控件工具栏中单击某控件,鼠标箭头在对话框内变成成“十十”字形状;在对话框指定位置单击鼠标左键,字形状;在对话框指定位置单击鼠标左键,再拖动选择框可改变控件的大小和位置。再拖动选择框可改变控件的大小和位置。u在控件工具栏中单击某控件,鼠标箭头在对话框内变在控件工具栏中单击某控件,鼠标箭头在对话框内变成成“十十”字形状;在指定位置处单击鼠标左键不放,字形状;在指定位置处单击鼠标左键不放,拖动鼠标至满意位置,释放鼠标键。拖动鼠标至满意位置,释放鼠标键。75.1对话框的使用对话框的使用(6 of 18)控件的选择控件的选择静态文本静态文本组框组框复选框复选框组合框组合框水平滚动条水平滚动条旋转按钮旋转按钮滑动条滑动条列表视图列表视图标签标签复合编辑复合编辑月历月历用户定制工具用户定制工具静态图片静态图片编辑框编辑框按钮按钮单选框单选框列表框列表框垂直滚动条垂直滚动条进展条进展条热键热键树形视图树形视图动画动画日期选择日期选择IP地址地址组合框的扩展组合框的扩展图图5.2 控件工具栏和各按钮含义控件工具栏和各按钮含义85.1对话框的使用对话框的使用(7 of 18)在对话框编辑器中添加和编辑控件在对话框编辑器中添加和编辑控件 (2)单个控件的选取单个控件的选取鼠标选取:保证选择按钮鼠标选取:保证选择按钮()是被选中的,移动鼠标指是被选中的,移动鼠标指针至指定的控件上,单击鼠标左键。针至指定的控件上,单击鼠标左键。一旦某个控件被选取后,其四周由选择框包围着,选择一旦某个控件被选取后,其四周由选择框包围着,选择框上还有几个框上还有几个(通常是八个通常是八个)蓝色实心小方块,拖动它可蓝色实心小方块,拖动它可改变控件的大小。改变控件的大小。95.1对话框的使用对话框的使用(8 of 18)在对话框编辑器中添加和编辑控件在对话框编辑器中添加和编辑控件 (3)多个控件的选取多个控件的选取 u在对话框内按住鼠标左键不放,拖出一个大的虚框,释在对话框内按住鼠标左键不放,拖出一个大的虚框,释放鼠标,则被该虚框所包围的控件都将被选取。放鼠标,则被该虚框所包围的控件都将被选取。u先按住先按住Shift键不放,用鼠标选取控件,直到所需要的多键不放,用鼠标选取控件,直到所需要的多个控件选取之后再释放个控件选取之后再释放Shift键。若在选取时,对已选取键。若在选取时,对已选取的控件再选取一下,则该控件取消选取。的控件再选取一下,则该控件取消选取。u多个控件被选取后,其中只有一个控件的选择框有几个多个控件被选取后,其中只有一个控件的选择框有几个蓝色实心小方块,这个控件称为主要控件,而其他控件蓝色实心小方块,这个控件称为主要控件,而其他控件的选择框的小方块是空心的。的选择框的小方块是空心的。105.1对话框的使用对话框的使用(9 of 18)在对话框编辑器中添加和编辑控件在对话框编辑器中添加和编辑控件 (4)控件的移动、删除和复制控件的移动、删除和复制u当单个控件或多个控件被选取后,按方向键或用鼠标当单个控件或多个控件被选取后,按方向键或用鼠标拖动控件的选择框可移动控件。拖动控件的选择框可移动控件。u选中某个控件之后,使用快捷键选中某个控件之后,使用快捷键Ctrl+C键复制该控件。键复制该控件。u若按若按Del键可将选取的控件删除。键可将选取的控件删除。115.1对话框的使用对话框的使用(10 of 18)在对话框编辑器中添加和编辑控件在对话框编辑器中添加和编辑控件 (5)设定控件的设定控件的Tab键次序键次序对话框内控件的对话框内控件的Tab键次序设定步骤如下:键次序设定步骤如下:u首先,选择首先,选择“Layout”“Tab Order”命令,或按快捷命令,或按快捷键键Ctrl+D,此时每个控件的左上方都有一个数字,表明此时每个控件的左上方都有一个数字,表明了当前了当前Tab键次序,如图键次序,如图5.4所示。所示。u其次,按新的次序依次用鼠标单击各个控件,新的其次,按新的次序依次用鼠标单击各个控件,新的Tab键键即可生成。即可生成。u最后,单击对话框或按最后,单击对话框或按Enter键结束键结束Tab Order的设置。的设置。图5.4 控件的控件的Tab键次序次序125.1对话框的使用对话框的使用(11 of 18)对话框内控件的布局对话框内控件的布局 图图5.6 Layout菜单命令项菜单命令项 靠齐上边靠齐上边 左左右右间隔相等间隔相等 大小相同大小相同靠齐左边靠齐左边上下居中上下居中宽度相同宽度相同 显示标尺显示标尺 靠齐右边靠齐右边 左右居中左右居中 高高度度相同相同测试对话框测试对话框 靠齐下边靠齐下边 上下间隔相等上下间隔相等显示网格显示网格图图5.5 控件布局工具栏控件布局工具栏135.1对话框的使用对话框的使用(12 of 18)5.1.4 对话框的编程对话框的编程给对话框添加完控件之后,还可以给对话框添加完控件之后,还可以修改对话框的属性修改对话框的属性,方法如下:方法如下:u选择选择“View”菜单菜单“Properties”命令或在对话框模板上命令或在对话框模板上点击鼠标右键,选取点击鼠标右键,选取Properties命令。命令。u如图,如图,General是对话框属性的默认显示页面,其中列有对是对话框属性的默认显示页面,其中列有对话框的标识符名称框、标题框等,具体说明如表。话框的标识符名称框、标题框等,具体说明如表。图图5.9 属性对话框属性对话框145.1对话框的使用对话框的使用(13 of 18)添加一个对话框类添加一个对话框类 在对话框模板的非控件的区域内双击或者启动在对话框模板的非控件的区域内双击或者启动ClassWizard,将出现如图将出现如图5.11所示的对话框。单击所示的对话框。单击OK,弹出如图弹出如图5.12所示所示的对话框。可以为对话框资源定义一个类名。的对话框。可以为对话框资源定义一个类名。图图5.11 “Adding a Class”对话框对话框图图5.12 “New Class”对话框对话框155.1对话框的使用对话框的使用(14 of 18)在程序中使用对话框类在程序中使用对话框类(1)利用项目工作区的利用项目工作区的FileView标签项,将标签项,将Ex_SDIHello.cpp源源文件打开;文件打开;(2)在在Ex_SDIHello.cpp源文件的前面加上包含类源文件的前面加上包含类CMyDlg的头的头文件:文件:#include MyDlg.h(3)在在InitInstance函数体中的函数体中的“return TRUE;”语句之前添加语句之前添加下列代码:下列代码:CMyDlg dlg;dlg.DoModal();DoModal是模式对话框最常用的函数,它负责对话框的显示是模式对话框最常用的函数,它负责对话框的显示和终止。和终止。(4)编译并运行。编译并运行。在程序的一开始就出现用户自己设计的对话框。在程序的一开始就出现用户自己设计的对话框。165.1对话框的使用对话框的使用(15 of 18)按钮消息映射按钮消息映射 在在ClassWizard中,选定中,选定IDC_BUTTON1的的BN_CLICKED,双击左键或单击双击左键或单击Add Function按钮,按钮,如图。如图。双击左键或单击双击左键或单击Edit Code按钮,在此成员函数添加按钮,在此成员函数添加代码。代码。图图5.13 “MFC ClassWizard”对话框对话框图图5.14 “Add Member Function”对话框对话框175.1对话框的使用对话框的使用(16 of 18)不同资源对象不同资源对象(控件、菜单命令控件、菜单命令等等)的消息是不相同的。的消息是不相同的。例如,按钮控件例如,按钮控件IDC_BUTTON1的消息有两个:的消息有两个:BN_CLICKED和和BN_DOUBLECLICKED,分别表示当分别表示当用户单击或双击该按钮时产生的消息。用户单击或双击该按钮时产生的消息。一般不需要对对话框中自带的一般不需要对对话框中自带的OK(确定确定)与与Cancel(取取消消)按钮进行消息映射,因为系统已自动设置了这两个按按钮进行消息映射,因为系统已自动设置了这两个按钮的动作,当用户单击这两个按钮都将自动关闭对话框。钮的动作,当用户单击这两个按钮都将自动关闭对话框。185.1对话框的使用对话框的使用(17 of 18)消息映射之后程序的变换:消息映射之后程序的变换:(1)在头文件在头文件(MyDlg.h文件文件)中系统自动声明消息处理函数中系统自动声明消息处理函数OnButton1:protected:/AFX_MSG(CMyDlg)afx_msg void OnButton1();/AFX_MSG(2)在在MyDlg.cpp源文件开头部分的消息映射入口,系统自动添加消源文件开头部分的消息映射入口,系统自动添加消息映射宏:息映射宏:BEGIN_MESSAGE_MAP(CMyDlg,CDialog)/消息映射开始消息映射开始/AFX_MSG_MAP(CMyDlg)ON_BN_CLICKED(IDC_BUTTON1,OnButton1)/AFX_MSG_MAPEND_MESSAGE_MAP()/消息映射结束消息映射结束195.1对话框的使用对话框的使用(18 of 18)消息映射之后程序的变换:消息映射之后程序的变换:(3)在在MyDlg.cpp文件中写入一个空的消息处理函数的模文件中写入一个空的消息处理函数的模板,以便用户填入具体代码,如下面的框架:板,以便用户填入具体代码,如下面的框架:void CMyDlg:OnButton1()/TODO:Add your control notification handler code here20第第5章对话框和常用控件章对话框和常用控件 5.1 对话框的使用对话框的使用 5.2 控件的创建和使用方法控件的创建和使用方法 5.3 常用控件常用控件 5.4 通用对话框和消息对话框通用对话框和消息对话框 215.2控件的创建和使用方法控件的创建和使用方法(1 of 9)5.2.1控件的创建方法控件的创建方法 控件的创建方式有以下两种:控件的创建方式有以下两种:一种一种是在对话框模板中用编辑器指定控件,也就是说,是在对话框模板中用编辑器指定控件,也就是说,将控件的父窗口指定为对话框,这样做的好处是明显将控件的父窗口指定为对话框,这样做的好处是明显的,因为当应用程序启动该对话框时,的,因为当应用程序启动该对话框时,Windows系统系统就会为对话框创建控件;而当对话框消失时,控件也就会为对话框创建控件;而当对话框消失时,控件也随之清除。随之清除。另一种另一种是将控件看作是任一窗口的子窗口,并通过调是将控件看作是任一窗口的子窗口,并通过调用相应的用相应的Create函数来手动创建。函数来手动创建。实际编程中,常用第一种方法创建控件。实际编程中,常用第一种方法创建控件。225.2控件的创建和使用方法控件的创建和使用方法(2 of 9)5.2.2 控件的控件的数据交换数据交换和和数据校验数据校验 例如,为例如,为CMyDlg类的按钮控件类的按钮控件IDC_EDIT1添加并使用其添加并使用其成员变量成员变量m_strEdit,则其相应的过程如下:,则其相应的过程如下:(1)启动启动MFC ClassWizard,切换到切换到Member Variables页页面。面。235.2控件的创建和使用方法控件的创建和使用方法(3 of 9)5.2.2 控件的控件的数据交换数据交换和和数据校验数据校验 例如,为例如,为CMyDlg类的按钮控件类的按钮控件IDC_EDIT1添加并使用其添加并使用其成员变量成员变量m_strEdit,则其相应的过程如下:,则其相应的过程如下:(2)选定选定Class name为为CMyDlg,然后在然后在Control IDs列表列表中,选定所要关联的控件中,选定所要关联的控件ID号号IDC_EDIT1,双击鼠标左,双击鼠标左键或单击键或单击Add Variable按钮,弹出如图所示对话框。按钮,弹出如图所示对话框。245.2控件的创建和使用方法控件的创建和使用方法(4 of 9)5.2.2 控件的控件的数据交换数据交换和和数据校验数据校验 例如,为例如,为CMyDlg类的按钮控件类的按钮控件IDC_EDIT1添加并使用添加并使用其成员变量其成员变量m_strEdit,则其相应的过程如下:,则其相应的过程如下:(3)在在Member variable name框中填好与控件相关联的成框中填好与控件相关联的成员变量员变量m_strEdit,单击,单击OK,在,在Control IDs列表中出现列表中出现刚才添加的内容。刚才添加的内容。255.2控件的创建和使用方法控件的创建和使用方法(5 of 9)5.2.2 控件的控件的数据交换数据交换和和数据校验数据校验 例如,为例如,为CMyDlg类的按钮控件类的按钮控件IDC_EDIT1添加并使用添加并使用其成员变量其成员变量m_strEdit,则其相应的过程如下:,则其相应的过程如下:(3)在在Member variable name框中填好与控件相关联的成框中填好与控件相关联的成员变量员变量m_strEdit,单击,单击OK,在,在Control IDs列表中出现列表中出现刚才添加的内容。刚才添加的内容。需要说明的是:需要说明的是:uDDV/DDX技术中,允许为同一个控件关联多个不同技术中,允许为同一个控件关联多个不同数据类型的成员变量,但是这些变量的名字也必须互数据类型的成员变量,但是这些变量的名字也必须互不相同。不相同。u如果添加的成员变量是一个数值类型,则在如果添加的成员变量是一个数值类型,则在MFC ClassWizard对话框的对话框的Member Variables页面下方通常页面下方通常还要求用户输入变量的范围,这就是控件的还要求用户输入变量的范围,这就是控件的数据校验数据校验设置。设置。265.2控件的创建和使用方法控件的创建和使用方法(5 of 9)5.2.2 控件的控件的数据交换数据交换和和数据校验数据校验 例如,为例如,为CMyDlg类的按钮控件类的按钮控件IDC_EDIT1添加并使用添加并使用其成员变量其成员变量m_strEdit,则其相应的过程如下:,则其相应的过程如下:(3)在在Member variable name框中填好与控件相关联的成框中填好与控件相关联的成员变量员变量m_strEdit,单击,单击OK,在,在Control IDs列表中出现列表中出现刚才添加的内容。刚才添加的内容。275.2控件的创建和使用方法控件的创建和使用方法(6 of 9)5.2.2 控件的控件的数据交换数据交换和和数据校验数据校验 例如,为例如,为CMyDlg类的按钮控件类的按钮控件IDC_EDIT1添加并使用添加并使用其成员变量其成员变量m_strEdit,则其相应的过程如下:,则其相应的过程如下:(4)单击单击OK,发现发现ClassWizard作了以下三方面的修改。作了以下三方面的修改。u在在MyDlg.h文件文件中,添加与控件关联的成员变量的声中,添加与控件关联的成员变量的声明,代码如下:明,代码如下:/Dialog Data/AFX_DATA(CMyDlg)enum IDD=IDD_DIALOG1;CStringm_strEdit;/AFX_DATA 285.2控件的创建和使用方法控件的创建和使用方法(7 of 9)5.2.2 控件的控件的数据交换数据交换和和数据校验数据校验 例如,为例如,为CMyDlg类的按钮控件类的按钮控件IDC_EDIT1添加并使用其添加并使用其成员变量成员变量m_strEdit,则其相应的过程如下:,则其相应的过程如下:(4)单击单击OK,发现,发现ClassWizard作了以下三方面的修改。作了以下三方面的修改。u在在MyDlg.cpp文件文件中的中的构造函数构造函数实现代码处,添加数实现代码处,添加数据成员变量的初始代码:据成员变量的初始代码:CMyDlg:CMyDlg(CWnd*pParent/*=NULL*/):CDialog(CMyDlg:IDD,pParent)/AFX_DATA_INIT(CMyDlg)m_strEdit=_T();/AFX_DATA_INIT295.2控件的创建和使用方法控件的创建和使用方法(8 of 9)5.2.2 控件的控件的数据交换数据交换和和数据校验数据校验 例如,为例如,为CMyDlg类的按钮控件类的按钮控件IDC_EDIT1添加并使用其添加并使用其成员变量成员变量m_strEdit,则其相应的过程如下:,则其相应的过程如下:(4)单击单击OK,发现,发现ClassWizard作了以下三方面的修改。作了以下三方面的修改。u在在MyDlg.cpp文件文件中的中的DoDataExchange函数函数体内,自动添体内,自动添加了控件的加了控件的DDX/DDV代码。代码。void CMyDlg:DoDataExchange(CDataExchange*pDX)CDialog:DoDataExchange(pDX);/调用此函数作为调用此函数作为DDX的开始的开始/AFX_DATA_MAP(CMyDlg)DDX_Text(pDX,IDC_EDIT1,m_strEdit);DDV_MaxChars(pDX,m_strEdit,20);/AFX_DATA_MAP305.2控件的创建和使用方法控件的创建和使用方法(9 of 9)5.2.2 控件的控件的数据交换数据交换和和数据校验数据校验 例如,为例如,为CMyDlg类的按钮控件类的按钮控件IDC_EDIT1添加并使用其添加并使用其成员变量成员变量m_strEdit,则其相应的过程如下:,则其相应的过程如下:(5)为一个控件定义一个关联的数据成员变量后,就可以为一个控件定义一个关联的数据成员变量后,就可以使用使用CWnd:UpdateData(BOOL param)函数实现控件的函数实现控件的控制,包括控件相关数据的输入和读取。控制,包括控件相关数据的输入和读取。nUpdateData(TRUE)函数实现把函数实现把控件的值控件的值传给传给变量变量,可,可以在程序中使用这个数据。(相当于输入)以在程序中使用这个数据。(相当于输入)nUpdateData(FALSE)函数实现把函数实现把变量的值变量的值传给传给控件控件,并且在控件中显示。并且在控件中显示。(相当于输出)(相当于输出)31第第5章对话框和常用控件章对话框和常用控件 5.1 对话框的使用对话框的使用 5.2 控件的创建和使用方法控件的创建和使用方法 5.3 常用控件常用控件 5.4 通用对话框和消息对话框通用对话框和消息对话框 325.3常用控件常用控件(1 of 29)根据控件的特性和功能,一般可将其分为三类:根据控件的特性和功能,一般可将其分为三类:Windows公共控件公共控件、ActiveX控件控件以及以及MFC新增新增的一些控件的一些控件。335.3常用控件常用控件(2 of 29)5.3.1 静静态控件和按控件和按钮 静态控件静态控件 一个静态控件是用来显示一个字符串、框、矩形、图标、位图等。静态控件不一个静态控件是用来显示一个字符串、框、矩形、图标、位图等。静态控件不接收用户输入,也不产生消息。接收用户输入,也不产生消息。在对话框编辑器的控件工具栏中,属于静态控件的有:在对话框编辑器的控件工具栏中,属于静态控件的有:静态文本静态文本()、组框组框()和和静态图片静态图片()三种。三种。图图5.21 静态控件的静态控件的General和和Style属性对话框属性对话框34图图5.22 按钮的不同类型按钮的不同类型5.3常用控件常用控件(3 of 29)按钮按钮(1)按键按钮按键按钮通常可以立即产生某个动作,执行某个命令,常被称为命令按钮。两种风通常可以立即产生某个动作,执行某个命令,常被称为命令按钮。两种风格:标准按键按钮和默认按键按钮。从外观上来说,默认按键按钮是在标格:标准按键按钮和默认按键按钮。从外观上来说,默认按键按钮是在标准按键按钮的周围加上一个黑色边框,这个黑色边框表示该按钮已接受到准按键按钮的周围加上一个黑色边框,这个黑色边框表示该按钮已接受到键盘的输入焦点,只须按回车键就能按下该按钮。具体设定的方法是在按键盘的输入焦点,只须按回车键就能按下该按钮。具体设定的方法是在按键按钮属性对话框的键按钮属性对话框的Style页面中选中页面中选中“Default button”项。项。(2)单选按钮单选按钮外形是在文本前有一个圆圈,被选中时,就标上一个黑点,可分为一般和外形是在文本前有一个圆圈,被选中时,就标上一个黑点,可分为一般和自动两种类型。自动类型中,若选中同组按钮中的某个单选按钮,则其余自动两种类型。自动类型中,若选中同组按钮中的某个单选按钮,则其余的单选按钮的选中状态就会清除,保证了多个选项始终只有一个被选中。的单选按钮的选中状态就会清除,保证了多个选项始终只有一个被选中。(3)复选框复选框外形是在文本前有一个空心方框,被选中时,复选框中就加上一个外形是在文本前有一个空心方框,被选中时,复选框中就加上一个“”标标记,三态复选框还有种处于灰框状态,表示记,三态复选框还有种处于灰框状态,表示“不确定不确定”。设定成三态复选。设定成三态复选框的方法是在复选框属性对话框的框的方法是在复选框属性对话框的Style页面中选中页面中选中“Tri-state”项。项。355.3常用控件常用控件(4 of 29)按钮的两个常用消息:按钮的两个常用消息:BN_CLICKED和和BN_DOUBLE_CLICKED。单选按钮单选按钮的常用操作:的常用操作:u对于多个单选按钮的选中状态的设置或获取,需要使用对于多个单选按钮的选中状态的设置或获取,需要使用CWnd类的成员函数类的成员函数CheckRadioButton和和GetCheckedRadioButton,原型:原型:void CheckRadioButton(int nIDFirstButton,int nIDLastButton,int nIDCheckButton);int GetCheckedRadioButton(int nIDFirstButton,int nIDLastButton);nIDFirstButton和和nIDLastButton指定这组单选按钮的第一个指定这组单选按钮的第一个和最后一个按钮和最后一个按钮ID值,值,nIDCheckButton指定要设置选中状态指定要设置选中状态的按钮的按钮ID值,函数值,函数GetCheckedRadioButton返回被选中的按返回被选中的按钮钮ID值。值。365.3常用控件常用控件(5 of 29)例例Ex_Ctrls1 用静态图片、单选按钮、复选框和按键按钮用静态图片、单选按钮、复选框和按键按钮控件,设计界面。程序开始时,所有单选按钮都是灰显的,控件,设计界面。程序开始时,所有单选按钮都是灰显的,不能选择;当选中不能选择;当选中“允许允许”复选框后,所有单选按钮可以使复选框后,所有单选按钮可以使用,选定一个单选框后,都可以单击命令按钮用,选定一个单选框后,都可以单击命令按钮“应用应用”。(1)用用MFC AppWizard(exe)创建一个名为创建一个名为Ex_CommCtrls的的基于对话框基于对话框的应用程序。在创建的第一步,将应用程序类型的应用程序。在创建的第一步,将应用程序类型选择为选择为Dialog Based,按,按Finish。自动显示出该程序的对自动显示出该程序的对话框资源模板内容。话框资源模板内容。(2)打开属性对话框将其标题改为打开属性对话框将其标题改为“使用使用Windows常用控件常用控件”。(3)用编辑器为对话框添加如下表所示的一些控件用编辑器为对话框添加如下表所示的一些控件:4个单选个单选按钮,按钮,1个复选框,个复选框,1个按键按钮。个按键按钮。375.3常用控件常用控件(5 of 29)(4)按按Ctrl+W快捷键,切换到快捷键,切换到Member Variables页面,页面,在在Class name中选择中选择CEx_CommCtrlstDlg,选中复选框控件选中复选框控件ID号号IDC_CHECK1,双击鼠标或单击双击鼠标或单击Add Variables按钮,按钮,在弹出的对话框中添加一个与在弹出的对话框中添加一个与IDC_CHECK1相关联的相关联的BOOL类型的变量类型的变量m_bEnabled。385.3常用控件常用控件(6 of 29)(5)切换到切换到ClassWizard的的Messsage Maps页面,为复选框页面,为复选框IDC_CHECK1和按钮和按钮IDC_BUTTON1增加增加BN_CLICKED的消息的消息映射映射,添加代码:,添加代码:void CEx_CommCtrlsDlg:OnCheck1()UpdateData();/控件传给变量控件传给变量 for(int i=0;i=2)/判断多行编辑框的文本是否有两行以判断多行编辑框的文本是否有两行以上上 int nChars;nChars=m_Edit.LineLength(m_Edit.LineIndex(1);/获取第二行文本的字符个数获取第二行文本的字符个数 /0表示第一行,表示第一行,1表示第二行,依次类推。表示第二行,依次类推。/LineIndex用于将文本行转换成能被用于将文本行转换成能被LineLength识别的索引识别的索引m_Edit.GetLine(1,str,nChars);/获取第二行文本获取第二行文本strnChars=0;MessageBox(str);475.3常用控件常用控件(11 of 29)编辑框的通知消息:编辑框的通知消息:EN_CHANGE EN_KILLFOCUS EN_MAXTEXT EN_SETFOCUS 485.3常用控件常用控件(11 of 29)例例Ex_Ctrls2 使用静态文本、组框、编辑框以及按钮等控件,设计使用静态文本、组框、编辑框以及按钮等控件,设计界面。用户在界面。用户在“成绩成绩1”、“成绩成绩2”和和“成绩成绩3”编辑框中输入成绩后,编辑框中输入成绩后,单击单击“计算平均分计算平均分”按钮,将显示出这三个成绩的平均分。按钮,将显示出这三个成绩的平均分。(1)打开前面的打开前面的Ex_CommCtrls项目。项目。(2)向应用程序中添加一个对话框资源,打开属性对话框将其标题改向应用程序中添加一个对话框资源,打开属性对话框将其标题改为为“使用编辑框使用编辑框”,ID号改为号改为IDD_EDIT。(3)用编辑器为对话框添加如下表所示的一些控件。用编辑器为对话框添加如下表所示的一些控件。(4)双击对话框模板或按双击对话框模板或按Ctrl+W快捷键,为对话框资源快捷键,为对话框资源IDD_EDIT创创建一个对话框类建一个对话框类CEditDlg。495.3常用控件常用控件(12 of 29)(5)打开打开ClassWizard的的Member Variables标签,在标签,在Class name中选中选择择CEditDlg,选中所需的控件选中所需的控件ID号,双击鼠标或单击号,双击鼠标或单击Add Variables按钮。依次为控件增加成员变量,如下表所示。按钮。依次为控件增加成员变量,如下表所示。(6)切换到切换到ClassWizard的的Messsage Maps标签页,为标签页,为CEditDlg增加增加WM_INITDIALOG的消息映射,并添加下列代码:的消息映射,并添加下列代码:BOOL CEditDlg:OnInitDialog()CDialog:OnInitDialog();m_strAve=0.00;m_Score1=m_Score2=m_Score3=0;UpdateData(FALSE);/将成员变量数据传给控件,并在控件中显将成员变量数据传给控件,并在控件中显示示return TRUE;505.3常用控件常用控件(13 of 29)(7)用ClassWziard为按钮IDC_BUTTON1添加BN_CLICKED的消息映射,并增加下列代码:void CEditDlg:OnButton1()UpdateData();/将控件显示的数据传给成员变量 double ave=(double)(m_nScore1+m_nScore2+m_nScore3)/3.0;m_strAve.Format(“%6.2f”,ave);/格式化输出 UpdateData(FALSE);/将成员变量数据传给控件并显示(8)定位到CEx_CommCtrlsDlg:OnButton1函数处,修改代码如下:if(nID=IDC_RADIO1)CEditDlg dlg;/定义对话框对象dlg.DoModal();/调用DoModal()函数,显示对话框(9)在Ex_CommCtrlsDlg.cpp文件的开始处,增加包含CEditDlg的头文件。#include“EditDlg.h”(10)编译运行并测试。515.3常用控件常用控件(14 of 29)5.3.3 列表框列表框列表框的风格列表框的风格 图图5.25 列表框的属性对话框列表框的属性对话框525.3常用控件常用控件(15 of 29)列表框的基本操作列表框的基本操作(1)添加列表项添加列表项列表框创建时是一个空的列表,需要添加或插入一些列表项列表框创建时是一个空的列表,需要添加或插入一些列表项。CListBox类成员函数类成员函数AddString 和和InsertString用来向列表框增加列表用来向列表框增加列表项,原型:项,原型:int AddString(LPCTSTR lpszItem);int InsertString(int nIndex,LPCTSTR lpszItem);CListBox的的SetItemData和和SetItemDataPtr能使数据和某个列表项关联能使数据和某个列表项关联起来。起来。int SetItemData(int nIndex,DWORD dwItemData);int SetItemDataPtr(int nIndex,void*pData);void*GetItemDataPtr(int nIndex);535.3常用控件常用控件(15 of 29)(2)删除列表项删除列表项 CListBox类成员函数类成员函数DeleteString和和ResetContent分别用来删除指定的分别用来删除指定的列表项和清除列表框所有项目。它们的函数原型如下:列表项和清除列表框所有项目。它们的函数原型如下:int DeleteString(UINT nIndex);/nIndex指定要删除的列表项的索引指定要删除的列表项的索引void ResetContent();/清空所有列表项清空所有列表项545.3常用控件常用控件(16 of 29)(3)查找列表项查找列表项CListBox类成员函数类成员函数FindString 和和FindStringExact分别分别用来在列表框中查找所匹配的列表项,其中用来在列表框中查找所匹配的列表项,其中FindStringExact的查找精度最高。的查找精度最高。int FindString(int nStartAfter,LPCTSTR lpszItem)const;int FindStringExact(int nIndexStart,LPCTSTR lpszFind)const;说明说明:(1)lpszItem和和lpszFind指定要查找的列表项文本,指定要查找的列表项文本,nStartAfter和和nIndexStart指定查找的开始位置,若为指定查找的开始位置,若为-1,则从头至尾查找。,则从头至尾查找。(2)查到后,这两个函数都将返回所匹配列表项的索引,)查到后,这两个函数都将返回所匹配列表项的索引,否则返回否则返回LB_ERR。555.3常用控件常用控件(16 of 29)(4)列表框的单项选择列表框的单项选择当选中列表框中某个列表项,可以使用当选中列表框中某个列表项,可以使用CListBox:GetCurSel来获取来获取这个结果,与该函数相对应的这个结果,与该函数相对应的CListBox:SetCurSel 函数是用来设定函数是用来设定某个列表项呈选中状态某个列表项呈选中状态(高亮显示高亮显示)。int GetCurSel()const;/返回当前选择项的索引返回当前选择项的索引int SetCurSel(int nSelect);说明:说明:nSelect指定要设置的列表项索引,错误时这两个函数都将返指定要设置的列表项索引,错误时这两个函数都将返回回LB_ERR。若要获取某个列表项的字符串,可使用下列函数:若要获取某个列表项的字符串,可使用下列函数:int GetText(int nIndex,LPTSTR lpszBuffer)const;void GetText(int nIndex,CString&rString)const;说明:说明:nIndex指定列表项索引,指定列表项索引,lpszBuffer和和rString是用来存放列表是用来存放列表项文本。项文本。565.3常用控件常用控件(17 of 29)(5)列表框的多项选择列表框的多项选择在列表框的在列表框的Style属性对话框中选中多选属性对话框中选中多选(Multiple)或扩展多选或扩展多选(Extended)风格后,就可以在列表框中进行多项选择。要想获得选中的多个选项,通过风格后,就可以在列表框中进行多项选择。要想获得选中的多个选项,通过需要用需要用ClassWizrd响应响应LBN_SELCHANGE消息,添加如下类似代码:消息,添加如下类似代码:void CListBoxDlg:OnSelchangeList1()int nCount=m_list.GetSelCount();/获取用户选中的项数获取用户选中的项数if(nCount!=LB_ERR)int*buffer=new intnCount;/开辟缓冲区开辟缓冲区m_list.GetSelItems(nCount,buffer);CString allStr,str;allStr.Empty();/字符串清空字符串清空for(int i=0;iscore1;m_Score2=data-score2;m_Score3=data-score3;UpdateData(FALSE);645.3常用控件常用控件(21 of 29)(8)用用ClassWizard为对话框添加为对话框添加WM_DESTROY的消息映的消息映射,增加代码:射,增加代码:void CListBoxDlg:OnDestroy()/此消息是当对话框关闭时发送的此消息是当对话框关闭时发送的for(int nIndex=m_List.GetCount()-1;nIndex=0;nIndex-)/删除所有与列表项相关联删除所有与列表项相关联的的SCORE结构数据,并释放内存结构数据,并释放内存 delete(SCORE*)m_List.GetItemDataPtr(nIndex);CDialog:OnDestroy();/关闭对话框关闭对话框说明:对话框被清除时发送说明:对话框被清除时发送WM_DESTROY消息。用户消息。用户在此消息的映射函数中添加一些对象删除代码,以便在在此消息的映射函数中添加一些对象删除代码,以便在对话框清除前有效地释放内存空间。对话框清除前有效地释放内存空间。655.3常用控件常用控件(22 of 29)(9)打开打开ListBoxDlg.h源文件,在类源文件,在类CListBoxDlg定义定义的的public处添加下处添加下列代码:列代码:public:struct SCOREint score1;int score2;int score3;(10)定位到定位到CEx_CommCtrlsDlg:OnButton1函数处,修改代码如下:函数处,修改代码如下:if(nID=IDC_RADIO2)CListBoxDlg dlg;dlg.DoModal();(11)在在Ex_CommCtrlsDlg.cpp文件的开始处,增加包含文件的开始处,增加包含CListBoxDlg的头的头文件。文件。#include“ListBoxDlg.h”(12)编译运行并测试。编译运行并测试。665.3常用控件常用控件(23 of 29)5.3.4 组合框组合框组合框的风格及类型组合框的风格及类型 图图5.27 组合框的属性对话框组合框的属性对话框675.3常用控件常用控件(24 of 29)组合框常见操作可组合框常见操作可分为分为两类两类,一类一类是对组合框中的列表框进是对组合框中的列表框进行操作,行操作,另一类另一类是对组合框中的编辑框进行操作。这些操作是对组合框中的编辑框进行操作。这些操作都可以调用都可以调用CComboBox类中的成员函数来实现的。类中的成员函数来实现的。组合框的通知消息:组合框的通知消息:685.3常用控件常用控件(25 of 29)例例Ex_Ctrls4 根据用户从组合框中选择的填充样式,在对话框中绘制一个根据用户从组合框中选择的填充样式,在对话框中绘制一个矩形区域,如图。矩形区域,如图。(1)打打开前面创建的基于对话框应用程序程序项目开前面创建的基于对话框应用程序程序项目Ex_CommCtrls。(2)向应用程序中添加一个对话框资源向应用程序中添加一个对话框资源IDD_COMBO,标题定为标题定为“使用组使用组合框合框”,用,用ClassWizard为此对话框类定义为为此对话框类定义为CComboDlg。(3)删除原来的删除原来的Cancel按钮,用编辑器为对话框添加控件。按钮,用编辑器为对话框添加控件。图图5.28 组合框示例运行结果组合框示例运行结果图图5.29 组合框控件布局组合框控件布局695.3常用控件常用控件(26 of 29)(4)打开打开ClassWizard的的Member Variables标签,为组合框标签,为组合框IDC_PATTERN增加成员变量增加成员变量m_Pattern,其类型为其类型为Control类的类的CComboBox。(5)为为CComboDlg类添加一个类添加一个int类型的成员变量类型的成员变量m_nDrawPattern。(6)切换到切换到ClassWizard的的Messsage Maps标签页,为组合框标签页,为组合框IDC_PATTERN添加添加CBN_SELCHANGE(组合框中的当前选项发生改变组合框中的当前选项发生改变)的消息映射,并增的消息映射,并增加下列代码:加下列代码:void CComboDlg:OnSelchangePattern()int nIndex=m_Pattern.GetCurSel();/获得当前选项的索引获得当前选项的索引if(nIndex!=CB_ERR)m_nDrawPattern=m_Pattern.GetItemData(nIndex);/获得与当前选项相关联的数据获得与当前选项相关联的数据 Invalidate();/强制系统调用强制系统调用OnPaint函数重新绘制函数重新绘制 705.3常用控件常用控件(27 of 29)(7)用用ClassWizard为对话框添加为对话框添加WM_PAINT的消息映射,并增加下列代码:的消息映射,并增加下列代码:void CComboDlg:OnPaint()CPaintDC dc(this);/device context for painting(绘图所必须的设备环境绘图所必须的设备环境)CWnd*pWnd=GetDlgItem(IDC_DRAW);/获得控件获得控件IDC_DRAW的窗口指针的窗口指针pWnd-UpdateWindow();/避免系统自动重绘避免系统自动重绘CDC*pDC=pWnd-GetDC();/获得所需要的绘图设备环境获得所需要的绘图设备环境CBrush drawBrush;/定义一个画刷定义一个画刷drawBrush.CreateHatchBrush(m_nDrawPattern,RGB(0,0,0);/创建画刷创建画刷CBrush*pOldBrush=pDC-SelectObject(&drawBrush);/将画刷选入当前设备环境中将画刷选入当前设备环境中CRect rcClient;/定义一个定义一个CRect变量变量pWnd-GetClientRect(rcClient);/获得窗口客户区大小获得窗口客户区大小pDC-Rectangle(rcClient);/用当前画刷绘制一个矩形区域用当前画刷绘制一个矩形区域pDC-SelectObject(pOldBrush);/恢复设备环境原来的画刷设置恢复设备环境原来的画刷设置 715.3常用控件常用控件(28 of 29)(8)用用ClassWizard为对话框添加为对话框添加WM_INITDIALOG的消息映射,增加代码:的消息映射,增加代码:BOOL CComboDlg:OnInitDialog()CDialog:OnInitDialog();CString str6=水平线水平线,竖直线竖直线,向下斜线向下斜线,向上斜线向上斜线,十字十字线线,交叉线交叉线;int nIndex;for(int i=0;i6;i+)nIndex=m_Pattern.AddString(stri);m_Pattern.SetItemData(nIndex,i);m_Pattern.SetCurSel(0);m_nDrawPattern=0;return TRUE;725.3常用控件常用控件(29 of 29)(9)定位到定位到CEx_CommCtrlsDlg:OnButton1函数处,修改代码如下:函数处,修改代码如下:if(nID=IDC_RADIO3)CComboDlg dlg;dlg.DoModal();(10)在在Ex_CommCtrlsDlg.cpp文件的开始处,增加包含文件的开始处,增加包含CComboDlg的头的头文件。文件。#include “ComboDlg.h”(11)编译运行并测试。编译运行并测试。73第第5章对话框和常用控件章对话框和常用控件 5.1 对话框的使用对话框的使用 5.2 控件的创建和使用方法控件的创建和使用方法 5.3 常用控件常用控件 5.4 通用对话框和消息对话框通用对话框和消息对话框 745.4通用对话框和消息对话框通用对话框和消息对话框(1 of 2)5.4.1通用对话框通用对话框 Windows提供了一组标准用户界面对话框,它们都有相应的提供了一组标准用户界面对话框,它们都有相应的MFC库中的类库中的类来支持。所有这些通用对话框类都是从一个公共的基类来支持。所有这些通用对话框类都是从一个公共的基类CCommonDialog派派生而来。表生而来。表5.19列出了这些通用对话框。列出了这些通用对话框。755.4通用对话框和消息对话框通用对话框和消息对话框(2 of 2)5.4.2消息对话框消息对话框 是最简单的一类对话框,只是用来显示信息的。是最简单的一类对话框,只是用来显示信息的。MFC类库中提供相类库中提供相应的函数实现这样的功能,只要在程序任何地方调用它们。函数原应的函数实现这样的功能,只要在程序任何地方调用它们。函数原型:型:int AfxMessageBox(LPCTSTR lpszText,UINT nType=MB_OK,UINT nIDHelp=0);int MessageBox(LPCTSTR lpszText,LPCTSTR lpszCaption=NULL,UINT nType=MB_OK);76第第5章对话框和常用控件章对话框和常用控件 5.1 对话框的使用对话框的使用 5.2 控件的创建和使用方法控件的创建和使用方法 5.3 常用控件常用控件 5.4 通用对话框和消息对话框通用对话框和消息对话框 77
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 生活常识


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!