《第4章__对话框和常用控件4学时》由会员分享,可在线阅读,更多相关《第4章__对话框和常用控件4学时(89页珍藏版)》请在金锄头文库上搜索。
1、第4章 对话框和常用控件,4.1 对话框的使用一般过程是:添加对话框资源; 设置对话框的属性; 添加和布局控件; 创建对话框类; 添加对话框代码; 在程序中调用对话框,4.1.1 资源与资源标识,1. 资源的分类 创建单文档应用程序Ex_SDI,然后项目工作区窗口切换到“ResourceView”页面。,快捷键列表(Accelerator):一系列组合键用来引发一个动作。与菜单命令相关联,代替鼠标操作。对话框(Dialog):含有按钮、列表框、编辑框等各种控件的窗口。图标(Icon):显示在桌面的位图,有32x32/16x16像素两种规格菜单(Menu):可以完成应用程序的大部分操作。字串表(
2、String Table):全局字符串或其他标识符。工具栏按钮(Toolbar):通常与菜单命令相对应,提高工作效率。版本信息(Version):应用程序的版本、用户注册码等相关信息。,除了上述常用资源类别外,也可以自己添加新的资源类别。,4.1.1 资源与资源标识,2. ID标识符/遵循下列规则在标识符名称中允许使用字母az、AZ、09以及下划线。标识符名称不区分大小写字母,如new_idd与New_Idd是相同的标识符。不能以数字开头,如8BIT是不合法的标识符名。除了上述规则外,Visual C+还提供了一些常用的定义标识符名称的前缀供用户使用、参考,见表4.1。,4.1.2 添加对话框
3、资源,(1) 选择“插入”“资源”菜单,或按快捷键Ctrl+R。如图4.2所示,表4.2列出各种类型的对话框资源的不同用途。,新建 创建一个由“资源类型”列表中指定类型的新资源;定制 创建“资源类型”列表中没有的新类型的资源;导入 是用于将外部已有的位图、图标、光标或其他定制的资源添加到当前应用程序中。,表4.2 对话框资源类型,4.1.2 添加对话框资源,(2) 选中“Dialog”,单击新建按钮,系统就会自动为当前应用程序添加了一个对话框资源,并出现如图4.3所示的界面。,对话框模板,控件工具栏,布局工具栏,默认标识符,图4.3 添加对话框资源后的开发环境,4.1.3 设置对话框属性,在对
4、话框模板处右击鼠标,从弹出的快捷菜单中选择“属性” ,出现如图4.4所示的对话框属性窗口。,图4.4 对话框属性窗口,对话框的属性有General(一般)、Styles (风格)、More Styles(更多风格)、Extended Styles(扩展风格)、More Extended Styles(更多扩展风格)等部分,这里仅介绍最常用的General属性,如表4.3所示。,4.1.3 设置对话框属性,表4.3 对话框的General属性,将添加的对话框的属性进行以下3点修改,结果如图4.5所示: 对话框标识符改成IDD_DIALOG_FIRST; 对话框标题改为“我的第一个对话框”; 单击
5、字体按钮,通过弹出的字体对话框将对话框内的文本设置成“宋体,9” 。,4.1.4 添加和布局控件,一旦对话框资源被打开或被创建,就会出现对话框编辑器,通过它可以在对话框中进行控件的添加和布局等操作。1. 控件的添加利用此工具栏中的各个按钮可以顺利完成控件的添加。,图4.6 控件工具栏和各按钮含义,4.1.4 添加和布局控件,2. 控件的选取单个控件: 用鼠标直接选取: 用助记符来选取:控件标题中带有下划线“助记符”,直接按助记符键或“Alt+助记符”组合键。 用Tab键选取:系统会根据控件的添加次序自动设置相应的Tab键次序。多个控件: 按住鼠标左键不放,拖出一个大的虚框,则被该虚框所包围的控
6、件都将被选取。 先按住Shift键不放,然后用鼠标选取控件。,需要注意的是:(1) 一旦单个控件被选取后如图4.7(a)所示。(2) 多个控件被选取后,其中只有一个控件的选择框有几个蓝色实心小方块,这个控件称为主要控件,而其他控件的选择框的小方块是空心的。如图4.7(b)所示。,图4.7 单个控件和多个控件的选择框,4.1.4 添加和布局控件,图4.8 控件布局工具栏,3. 控件的删除、复制和布局 当单个或多个控件被选取后,可移动控件、Ctrl键复制控件、Del键删除。和一般的文档编辑器基本相同。 对话框编辑器中提供了控件布局工具栏,它可以自动地排列对话框内的控件,并能改变控件的大小。,图4.
7、9 “编排”菜单命令项,表4.4 “编排”菜单命令的快捷键及功能描述,4.1.5 创建对话框类,图4.12 “Adding a Class”对话框,图4.13 “New Class”对话框,在对话框资源模板的空白区域(没有其他元素或控件)内双击鼠标,将弹出如图4.12所示的对话框。单击OK按钮,如图4.13所示。在Name框中输入类名CFirstDlg。Base class和Dialog ID内容是由系统自动设置的,一般无需修改。从Base class框的内容可以看出,用户对话框类是从基类CDialog派生而来的。单击OK按钮,一个基于对话框资源模板的对话框类CFirstDlg就创建好了。,4
8、.1.6 添加对话框代码,在MFC ClassWizard对话框,在IDs列表中选择CFirstDlg。1)初始化:在Messages框中找到并选定WM_INITDIALOG消息,如图示。,4.1.6 添加对话框代码,BOOL CFirstDlg:OnInitDialog() CDialog:OnInitDialog(); / TODO: Add extra initialization here CStatic* pWnd =(CStatic*)GetDlgItem(IDC_STATIC_1); pWnd-SetWindowText(这是我的第一个对话框!); return TRUE;/ r
9、eturn TRUE unless you set the focus to a control/ EXCEPTION: OCX Property Pages should return FALSE,2)选择OnInitDialog函数,单击Edit Code按钮(或直接在函数名双击鼠标),将自动出现该函数代码编辑窗口,添加代码:,CStatic是静态文本控件的MFC类,SetWindowText是CWnd的一个成员函数,用来设置窗口的文本内容。GetDlgItem也是CWnd类的一个成员函数,用来获得对话框中控件(参数是控件的ID标识符,这里是IDC_STATIC_1)的窗口指针。,4.1.
10、7 在程序中调用对话框,3.菜单的空位置,输入新的菜单项,图4.15 Ex_SDI菜单资源,1.选择ResourceView,2.双击资源“Menu”项中的IDR_MAINFRAME,4.子菜单的空位置,5.保存可见按钮,(1)在菜单的空位置上双击鼠标左键,则出现它的属性对话框,在标题框中输入“测试(&T)”,结果如图4.16所示,其中符号&用来其后面的字符作为该菜单项的助记符,这样当按住“Alt”键不放,再敲击该助记符键时,对应的菜单项就会被选中,或在菜单打开时,直接按相应的助记符键,对应的菜单项也会被选中。,4.1.7 在程序中调用对话框,图4.17 修改菜单项属性,(2) 单击菜单属性对
11、话框中的“保存可见”(Keep Visible)按钮。单击“测试”菜单项下方的空位置,在属性对话框中,输入标题“对话框(&D)”,在ID框输入该菜单项的资源标识:ID_TEST_DLG,如图4.17所示。(3) 单击“测试”菜单项并按住鼠标左键不放,移动鼠标,将“测试”菜单项移到“查看”和“帮助”菜单项之间,然后释放鼠标。结果如图4.18所示。,4.1.7 在程序中调用对话框,(4) 弹出MFC ClassWizard对话框。在Messages框中选择 COMMAND消息。(5) 单击Add Function按钮或双击COMMAND,出现Add Member Function对话框,输入成员函
12、数的名称:OnTestDlg,如图4.19所示。也就是说,当在应用程序运行时,用户选择“测试”“对话框”,则该函数OnTestDlg被调用,执行函数中的代码。,图4.19 添加成员函数,4.1.7 在程序中调用对话框,代码中,DoModal是CDialog基类成员函数,用来将对话框按模式方式来显示。(7) 在OnTestDlg函数的实现文件MainFrm.cpp的前面添加CFirstDlg类的包含语句,即:,(6) 单击OK ,ClassWizard的Member functions列表中将列出新增加的成员函数。,void CMainFrame:OnTestDlg() CFirstDlg dl
13、g;/ 定义对话框类对象 dlg.DoModal(); / 显示对话框,#include Ex_SDI.h#include MainFrm.h#include FirstDlg.h,(8) 编译并运行。在应用程序菜单上,选择“测试”“对话框”菜单项,将出现如图4.20的对话框,这个对话框就是刚才添加的对话框。,图4.20 对话框的显示,4.1.8 使用无模式对话框,模式对话框:对话框被弹出,户必须对话框作出相应的操作,在退出对 话框之前,其它操作不能继续执行。 无模式对话框:是指当对话框被弹出后,一直保留在屏幕上。,创建并使用无模式对话框,其步骤如下:添加一个对话框,将其标识符设为IDD_DI
14、ALOG_SECOND。为IDD_DIALOG_SECOND对话框资源创建一个对话框类CSecondDlg。 MFC ClassWizard,从“Class name”列表中选择CSecondDlg,在IDs列表中选择IDOK,它是对话框中OK按钮的标识符,然后在Messages框中选择BN_CLICKED(单击按钮)消息,单击Add Function按钮,输入成员函数的名称,保留系统默认的函数名为OnOK。该函数是对OK按钮单击消息的映射,即当用户单击此对话框中的OK按钮时,OnOK函数被执行。 修改CSecondDlg:OnOK函数中的代码。,4.1.8 使用无模式对话框,void CSe
15、condDlg:OnOK( ) DestroyWindow();/ 终止对话框显示 delete this;/ 删除对话框,释放内存空间,代码中,DestroyWindow是对话框基类CWnd的一个成员函数,用来终止窗口。,4.2 控件的创建和使用方法,为了更好地发挥控件作用,必须理解和掌握控件的属性、消息以及创建和使用的方法。4.2.1 控件的创建方法一种是将控件的父窗口指定为对话框,这样做的好处是明显的,因为当应用程序启动该对话框时,Windows系统就会为对话框创建控件;而当对话框消失时,控件也随之清除。另一种是将控件看作是任一窗口的子窗口,并通过调用相应的Create函数来创建。,4.2.1 控件的创建方法,例Ex_DlgCtrls 使用控件的编程方式来创建一个按钮选择“文件”“新建”菜单,在弹出的新建对话框的项目类型列表中选择MFC AppWizard(exe)类型,在工程框中输入项目名Ex_DlgCtrls。 单击确定按钮,在出现的“Step 1”对话框中选择“基本对话”应用程序类型,单击完成按钮。,