对话框和控件对话框_第1页
对话框和控件对话框_第2页
对话框和控件对话框_第3页
对话框和控件对话框_第4页
对话框和控件对话框_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第10章章 对话框和控件对话框和控件_对话框对话框10.1 10.1 对话框和控件的基本概念对话框和控件的基本概念 10.1.1 10.1.1 对话框的基本概念对话框的基本概念 10.1.2 10.1.2 控件的基本概念控件的基本概念10.1.1 10.1.1 对话框的基本概念对话框的基本概念在在MFCMFC中,对话框的功能被封装在了中,对话框的功能被封装在了CDialogCDialog类中,类中,CDialogCDialog类是类是CWndCWnd类的派生类。类的派生类。有模式对话框有模式对话框垄断了用户的输入,当一个有模式垄断了用户的输入,当一个有模式对话框打开时,用户只能与该对话框进行

2、交互,而对话框打开时,用户只能与该对话框进行交互,而其它用户界面对象收不到输入信息。其它用户界面对象收不到输入信息。无模式对话框无模式对话框类似普通的类似普通的WindowsWindows窗口,在无模窗口,在无模式对话框打开时,用户可以同时打开其它窗口对象,式对话框打开时,用户可以同时打开其它窗口对象,操作完毕后,又可用鼠标或其它方式激活该窗口。操作完毕后,又可用鼠标或其它方式激活该窗口。对话框的组成对话框的组成n对话框模板资源对话框模板资源对话框模板对话框模板用于指定对话框的外观、控件及用于指定对话框的外观、控件及其分布其分布n对话框类对话框类用来实现对话框的功能,由于对话框具体的用来实现对

3、话框的功能,由于对话框具体的功能各不相同,因此一般需要从功能各不相同,因此一般需要从CDialog类类派生派生一个新类一个新类,添加特定的数据成员和成员函数,以,添加特定的数据成员和成员函数,以完成特定的功能。完成特定的功能。对话框的设计对话框的设计n有模式对话框:有模式对话框:创建时调用创建时调用DoModal()函数;函数;关闭时调用关闭时调用CDialog:EndDialog()函数。函数。n无模式对话框:无模式对话框:创建调用创建调用Create()函数;函数;关闭时调用关闭时调用CWnd:DestroyWindow()函数,函数,或调用或调用CWnd:ShowWindow(SW_HI

4、DE)来隐来隐藏对话框。藏对话框。 10.1.2 10.1.2 控件的基本概念控件的基本概念 控件控件(Control components)(Control components)是独立的小部件,是独立的小部件,是现成的程序组件,可以独立运行并完成一定的功是现成的程序组件,可以独立运行并完成一定的功能。能。在可视化编程中,控件的外观和功能由其属性在可视化编程中,控件的外观和功能由其属性(property)(property)规定。规定。 所有的控件都是由所有的控件都是由CWndCWnd类类派生的类对象,因此派生的类对象,因此它们均有和它们均有和CWndCWnd类似的属性。每个控件均有一个类似

5、的属性。每个控件均有一个标标识符(识符(IDID),),在程序中可以通过这个标识符对相应在程序中可以通过这个标识符对相应的控件进行操作。的控件进行操作。 表表10.110.1介绍了一些常用的控件及其对应的控件介绍了一些常用的控件及其对应的控件类。类。10.2 10.2 使用使用AppWizardAppWizard开发开发MFCMFC应用程序应用程序10.2.1 10.2.1 生成基于对话框的生成基于对话框的MFCMFC应用程序框架应用程序框架10.2.2 10.2.2 使用使用AppWizardAppWizard工具生成的程序和改工具生成的程序和改 变了的工程工作区变了的工程工作区10.2.1

6、 10.2.1 生成基于对话框的生成基于对话框的MFCMFC应用程序框架应用程序框架(1)(1)启动启动MFC AppWizardMFC AppWizard (2)MFC AppWizard-Step 1(2)MFC AppWizard-Step 1对话框:对话框: 选择应用程序的选择应用程序的类型类型和语言。和语言。 (3)MFC AppWizard-Step 2 of 4(3)MFC AppWizard-Step 2 of 4对话框:对话框: 询问了三个问题并要求输入一个标题。询问了三个问题并要求输入一个标题。 (4)MFC AppWizard-Step 3 of 4(4)MFC AppW

7、izard-Step 3 of 4对话框:对话框: 询问了三个问题。询问了三个问题。(5)MFC AppWizard-Step 4 of 4(5)MFC AppWizard-Step 4 of 4对话框:对话框: 显示显示AppWizardAppWizard为应用程序生成的派生类为应用程序生成的派生类的一些情况。的一些情况。(6)(6)编译运行。编译运行。MFC AppWinzard(exe)应用程序类型)应用程序类型n单文档应用程序单文档应用程序:类似于:类似于Windows记事本的程序,记事本的程序,功能比较简单,复杂程序适中,每次只能打开和功能比较简单,复杂程序适中,每次只能打开和处理一

8、个文档。大多数应用程序的编制都是从单处理一个文档。大多数应用程序的编制都是从单文档程序框架开始的。文档程序框架开始的。n对话框应用程序:对话框应用程序:最简单、最紧凑,没有菜单、最简单、最紧凑,没有菜单、工具栏和状态栏,也不能处理文档,但速度快,工具栏和状态栏,也不能处理文档,但速度快,代码少。代码少。n多文档应用程序:多文档应用程序:能允许同时打开和处理多个文能允许同时打开和处理多个文档,相对于单文档,增加了许多功能,因而也需档,相对于单文档,增加了许多功能,因而也需要大量额外的编程工作,如不仅需要跟踪所有打要大量额外的编程工作,如不仅需要跟踪所有打开文档的路径,还需要管理各文档窗口的显示和

9、开文档的路径,还需要管理各文档窗口的显示和更新等。更新等。10.2.2 10.2.2 使用使用AppWizardAppWizard工具生成的程工具生成的程序和改变了的工程工作区序和改变了的工程工作区 添加并使用对话框添加并使用对话框(补充)(补充)2.1 资源与资源标识资源与资源标识1. 资源的分类资源的分类 创建一个默认的单文档应用程序项目创建一个默认的单文档应用程序项目Ex_SDI1,并其项目工作区窗口切换到并其项目工作区窗口切换到“ResourceView”页面,页面,Ex_SDI1资源视图:资源视图:资源类别资源类别资源标识符资源标识符 快捷键列表快捷键列表(Accelerator):

10、一系列组合键的集合,被应一系列组合键的集合,被应用程序用来引发一个动作。用程序用来引发一个动作。 对话框对话框(Dialog):含有按钮、列表框、编辑框等各种控件含有按钮、列表框、编辑框等各种控件的窗口。的窗口。 图标图标(Icon):代表应用程序显示在代表应用程序显示在Windows桌面上的位,桌面上的位,它同时有它同时有3232像素和像素和1616像素两种规格。像素两种规格。 菜单菜单(Menu):用户通过菜单完成应用程序的大部分操作。用户通过菜单完成应用程序的大部分操作。 字串表字串表(String Table):应用程序使用的全局字符串或其应用程序使用的全局字符串或其他标识符。他标识符

11、。 工具栏按钮工具栏按钮(Toolbar):工具栏外观是以一系列具有相同尺工具栏外观是以一系列具有相同尺寸的位图组成的寸的位图组成的 版本信息版本信息(Version):包含应用程序的版本、用户注册码包含应用程序的版本、用户注册码等相关信息。等相关信息。 还有还有鼠标指针、鼠标指针、HTML等,也自己添加新的资源类别。等,也自己添加新的资源类别。Visual C+ 6.0中的资源类别中的资源类别 2. 标识符标识符 每个资源都是由标识符来定义的,当添加或创建每个资源都是由标识符来定义的,当添加或创建资源或资源对象时,系统会为其提供默认的名称,资源或资源对象时,系统会为其提供默认的名称,如如ID

12、R_MAINFRAME等。等。 当然,用户也可自定义,但要遵循下列规则:当然,用户也可自定义,但要遵循下列规则: (1) 在标识符名称中只能使用字母在标识符名称中只能使用字母az、AZ、09以及下划线,但不能以数字开头。以及下划线,但不能以数字开头。(2) 标识符名称标识符名称不区分大小写字母不区分大小写字母,如,如new_idd与与New_Idd是相同的标识符。是相同的标识符。(3) 字符个数不得超过字符个数不得超过247个。个。 2. 标识符标识符 标识符前缀标识符前缀 含义含义IDR_表示快捷键或菜单相关资源表示快捷键或菜单相关资源IDD_表示对话框资源表示对话框资源IDC_表示光标资源

13、或控件表示光标资源或控件IDI_表示图标资源表示图标资源IDB_表示位图资源表示位图资源IDM_表示菜单项表示菜单项ID_表示命令项表示命令项IDS_表示字符表中的字符串表示字符表中的字符串IDP_表示消息框中使用的字符串表示消息框中使用的字符串 Visual C+还提供了一些常用的定义标识符名称的前还提供了一些常用的定义标识符名称的前缀供用户使用、参考(见下表)。缀供用户使用、参考(见下表)。u 每一个定义的标识符都保存在应用程序项目每一个定义的标识符都保存在应用程序项目的的Resource.h文件中,它的取值范围为文件中,它的取值范围为032767。u 在同一个程序项目中,资源标识符名称不

14、能在同一个程序项目中,资源标识符名称不能相同,不同的标识符的值也不能一样。相同,不同的标识符的值也不能一样。 2. 标识符标识符 资源基本操作资源基本操作 n创建资源创建资源 n(1) 从从“Insert”菜单选取菜单选取“Resource”;或用快捷键;或用快捷键Ctrl+R打开对话框打开对话框nNew用来创建一个由用来创建一个由Resource Type列表中指定类型的新资源列表中指定类型的新资源nCustom按钮用来创建按钮用来创建Resource Type列表中没有的新类型的列表中没有的新类型的资源资源nImport按钮用于将外部已有的位图、图标、光标或其他定制的按钮用于将外部已有的位

15、图、图标、光标或其他定制的资源添加到当前应用程序中资源添加到当前应用程序中n(2) 从从Resource Type列表中选择一种资源类型,而后列表中选择一种资源类型,而后按按New按钮按钮n(3) 在项目工作区窗口的在项目工作区窗口的ResourceView页面中,看到页面中,看到了刚才选中的资源的缺省标识符,而且相应的资源编辑器了刚才选中的资源的缺省标识符,而且相应的资源编辑器自动打开自动打开资源基本操作资源基本操作n打开资源打开资源 n如果需要对已有资源进行查看或修改,可以首先如果需要对已有资源进行查看或修改,可以首先切换到项目工作区窗口的切换到项目工作区窗口的ResourceView标签

16、页,标签页,然后选中要打开的资源,双击鼠标左键或者按然后选中要打开的资源,双击鼠标左键或者按Enter键,这时相应的资源编辑器也会相应自动键,这时相应的资源编辑器也会相应自动打开。打开。n保存资源保存资源 n当设计或修改好一个资源后,用当设计或修改好一个资源后,用File菜单的菜单的Save菜单命令或利用快捷键菜单命令或利用快捷键Ctrl+S将其保存在当前资将其保存在当前资源文件中。源文件中。资源基本操作资源基本操作n删除、复制资源删除、复制资源 n如删除一个已有的资源,首先切换到项目工作如删除一个已有的资源,首先切换到项目工作区窗口的区窗口的ResourceView标签页,然后选中要标签页,

17、然后选中要打开的资源,按打开的资源,按Del键或者利用键或者利用Edit菜单下的菜单下的Delete菜单项可实现删除。菜单项可实现删除。n复制资源的过程与删除类似,选中要复制的资复制资源的过程与删除类似,选中要复制的资源,按住源,按住Ctrl键不放,并拖动鼠标左键或利用键不放,并拖动鼠标左键或利用Edit菜单中的菜单中的Copy和和Paste菜单命令进行操作,菜单命令进行操作,同其他软件的复制过程相同。同其他软件的复制过程相同。资源文件的管理资源文件的管理n资源文件一经创建,其中所包含的资源也就随资源文件一经创建,其中所包含的资源也就随之而定,与资源相对应的标识符也被保存在之而定,与资源相对应

18、的标识符也被保存在Resource.h头文件中。头文件中。n一般,在一个资源文件一般,在一个资源文件.RC中所保存的所有资源已经中所保存的所有资源已经满足的需要了,尽管如此,满足的需要了,尽管如此,VC仍然允许用多个文件仍然允许用多个文件来存放资源。来存放资源。n用用View菜单中的菜单中的Resource Includes菜单命令打开菜单命令打开“Resource Includes”对话框时,可以看到对话框时,可以看到Compile-time directives编辑框中已经含有编辑框中已经含有#include resEx_Sdi.rc2。 n资源编辑器资源编辑器 n所有所有Windows资

19、源都可以用资源都可以用VC提供的资源编辑器来提供的资源编辑器来编辑编辑2.2 添加对话框资源添加对话框资源 例例Ex_SDI 在单文档程序中添加对话框资源在单文档程序中添加对话框资源 创建一个默认的单文档应用程序项目创建一个默认的单文档应用程序项目Ex_SDI。 (1) 选择选择“插入插入”“资源资源”菜单,或按快捷键菜单,或按快捷键Ctrl+R打打开开“插入资源插入资源” 对话框中看到资源列表中存在对话框中看到资源列表中存在Dialog项,项,若单击若单击Dialog项左边的项左边的“+”号,将展开对话框资源的不同号,将展开对话框资源的不同类型选项,表列出各种类型的对话框资源的不同用途。类型

20、选项,表列出各种类型的对话框资源的不同用途。“插入资源插入资源”对话框对话框 :添加对话框资源添加对话框资源 新建新建:用来创建一个由:用来创建一个由“资源类型资源类型”列表中指定类型的新资源。列表中指定类型的新资源。 定制定制:是用来创建:是用来创建“资源类型资源类型”列表中没有的新类型的资源。列表中没有的新类型的资源。 导入导入:是用于将外部已有的位图、图标、光标或其他定制的:是用于将外部已有的位图、图标、光标或其他定制的 资源添加到当前应用程序中。资源添加到当前应用程序中。 类类 型型说说 明明IDD_DIALOGBAR对话条,往往和工具条停放一起对话条,往往和工具条停放一起IDD_FO

21、RMVIEW一个表状风格的对话框,用于无模式对话一个表状风格的对话框,用于无模式对话框或视图类框或视图类IDD_OLE_PROPPAGE_LARGE一个大的一个大的OLE属性页属性页IDD_OLE_PROPPAGE_SMALL一个小的一个小的OLE属性页属性页IDD_ PROPPAGE_LARGE一个大属性页,用于属性对话框一个大属性页,用于属性对话框IDD_ PROPPAGE_MEDIUM一个中等大小的属性页,用于属性对话框一个中等大小的属性页,用于属性对话框IDD_ PROPPAGE_SMALL一个小的属性页,用于属性对话框一个小的属性页,用于属性对话框添加对话框资源添加对话框资源(2)

22、对展开的不同类型的对话框资源不作任何选择,对展开的不同类型的对话框资源不作任何选择,选中选中“Dialog”,单击,单击新建新建按钮,系统就会自动为按钮,系统就会自动为当前应用程序添加了一个对话框资源。当前应用程序添加了一个对话框资源。 添加对话框资源添加对话框资源 系统为对话框资源自动赋给它一个默认标识符名系统为对话框资源自动赋给它一个默认标识符名称称 使用通用的对话框模板创建新的对话框资源。对使用通用的对话框模板创建新的对话框资源。对话框的话框的默认标题为默认标题为Dialog,有,有OK和和Cancel两个按两个按钮,这两个按钮的标识符分别为钮,这两个按钮的标识符分别为IDOK和和IDC

23、ANCEL。 对话框模板资源所在的窗口称为对话框资源编辑对话框模板资源所在的窗口称为对话框资源编辑器,在这里可以通过控件工具栏和布局工具栏向对话器,在这里可以通过控件工具栏和布局工具栏向对话框添加和布局控件,并可设置对话框的属性。框添加和布局控件,并可设置对话框的属性。2.3 设置对话框属性设置对话框属性 在对话框模板处右击鼠标,从弹出的快捷菜单在对话框模板处右击鼠标,从弹出的快捷菜单中选择中选择“属性属性”菜单项,出现如图所示的对话框属菜单项,出现如图所示的对话框属性窗口。性窗口。 对话框的属性有对话框的属性有General(一般一般)、Styles(风格风格)、More Styles(更多

24、更多)、Extended Styles(扩展风格扩展风格)、MoreExtended Styles(更多扩展风格更多扩展风格)等部分。等部分。 对话框的对话框的General属性属性项 目说 明ID框框 修改或选择对话框的标识符名称修改或选择对话框的标识符名称标题框标题框 输入对话框的标题名称,中英文均可,如输入对话框的标题名称,中英文均可,如“我的对话框我的对话框”字体按钮字体按钮 单击此按钮可选择字体的种类单击此按钮可选择字体的种类(如宋体如宋体)及尺及尺寸寸(如如9号号)Xpos/Ypos 对话框左上角在父窗口中的对话框左上角在父窗口中的X、Y坐标,都坐标,都为为0时表示居中时表示居中菜

25、单框菜单框 默认值为无,当对话框需要菜单时输入或选默认值为无,当对话框需要菜单时输入或选择指定的菜单资源择指定的菜单资源Class name 默认值为无,它提供默认值为无,它提供C/C+语言编程时所语言编程时所需要的对话框类名,对需要的对话框类名,对MFC类库的资源文件来类库的资源文件来说,该项不被激活。说,该项不被激活。2.4 添加和布局控件添加和布局控件 1. 控件的添加控件的添加利用此工具栏中的各个按钮可以完成控件的添加。利用此工具栏中的各个按钮可以完成控件的添加。控件的选择控件的选择静态文本静态文本组框组框复选框复选框组合框组合框水平滚动条水平滚动条旋转按钮旋转按钮滑动条滑动条列表视图

26、列表视图标签标签复合编辑复合编辑月历月历用户定制工具用户定制工具静态图片静态图片编辑框编辑框按钮按钮单选框单选框列表框列表框垂直滚动条垂直滚动条进展条进展条热键热键树形视图树形视图动画动画日期选择日期选择IP地址地址组合框的扩展组合框的扩展添加控件的几种方法:添加控件的几种方法:在控件工具栏中单击某控件在控件工具栏中单击某控件,此时鼠标箭头在对话,此时鼠标箭头在对话框内变成框内变成“十十”字形状;字形状;在对话框指定位置单击鼠标在对话框指定位置单击鼠标左键左键,则此控件被添加到对话框的相应位,再拖动选,则此控件被添加到对话框的相应位,再拖动选择框可改变控件的大小和位置。择框可改变控件的大小和位

27、置。在控件工具栏中单击某控件在控件工具栏中单击某控件,此时鼠标箭头对话框,此时鼠标箭头对话框内变成内变成“十十”字形状;字形状;在指定位置单击鼠标左键不放,在指定位置单击鼠标左键不放,拖动鼠标至满意位置,释放鼠标键拖动鼠标至满意位置,释放鼠标键。用鼠标左键点中控件工具栏中的某控件,按住鼠标用鼠标左键点中控件工具栏中的某控件,按住鼠标左键不放;左键不放;在移动鼠标到对话框的指定位置的过程中,在移动鼠标到对话框的指定位置的过程中,会看到一个虚线框,下面带有该控件的标记;释放鼠会看到一个虚线框,下面带有该控件的标记;释放鼠标左键,新添加的控件立即出现在对话框中。标左键,新添加的控件立即出现在对话框中

28、。2. 控件的选取(控件的选取(1) 控件的删除、复制和布局操作一般都要先选取控件的删除、复制和布局操作一般都要先选取控件,若选取单个控件,则可以下列方法:控件,若选取单个控件,则可以下列方法: 鼠标直接选取。鼠标直接选取。首先保证在控件工具栏中的选首先保证在控件工具栏中的选择按钮择按钮( )是被选中的,然后移动鼠标指针至指是被选中的,然后移动鼠标指针至指定的控件上,单击鼠标左键即可。定的控件上,单击鼠标左键即可。 用助记符来选取。用助记符来选取。如果控件的标题中带有下划线如果控件的标题中带有下划线的字符,这个字符就是助记符,选择时直接按下该的字符,这个字符就是助记符,选择时直接按下该助记符键

29、或助记符键或“Alt+助记符助记符”组合键即可。组合键即可。 用用Tab键选取。键选取。在对话框编辑器中,系统会根据在对话框编辑器中,系统会根据控件的添加次序自动设置相应的控件的添加次序自动设置相应的Tab键次序。利用键次序。利用Tab键,用户可在对话框内的控件中进行选择。键,用户可在对话框内的控件中进行选择。 对于多个控件的选取,可采用下列方法:对于多个控件的选取,可采用下列方法: 先在对话框内按住鼠标左键不放,拖出一个大的虚框,先在对话框内按住鼠标左键不放,拖出一个大的虚框,然后释放鼠标,则被虚框所包围的控件将被选取。然后释放鼠标,则被虚框所包围的控件将被选取。 先按住先按住Shift键不

30、放,然后用鼠标选取控件,直到所需键不放,然后用鼠标选取控件,直到所需要的多个控件选取之后再释放要的多个控件选取之后再释放Shift键。键。注意:注意:(1) 单个控件被选取后,选择框上还有几个蓝色实心小单个控件被选取后,选择框上还有几个蓝色实心小方块,拖动它可改变控件的大小。方块,拖动它可改变控件的大小。(2) 多个控件被选取后,其中只有一个控件的选择框有多个控件被选取后,其中只有一个控件的选择框有几个蓝色实心小方块,这个控件称为主要控件的小方块。几个蓝色实心小方块,这个控件称为主要控件的小方块。(b)(a)2. 控件的选取(控件的选取(2)3. 控件的删除、复制和布局控件的删除、复制和布局

31、单个控件或多个控件被选取后,按方向键或用鼠标拖单个控件或多个控件被选取后,按方向键或用鼠标拖动控件的选择框可移动控件。在鼠标拖动过程中还按住动控件的选择框可移动控件。在鼠标拖动过程中还按住Ctrl键则复制控件。按键则复制控件。按Del键可将选取的控件删除。对控键可将选取的控件删除。对控件的布局,对话框编辑器中提供了控件布局工具栏可以件的布局,对话框编辑器中提供了控件布局工具栏可以自动地排列对话框内的控件,并能改变控件的大小自动地排列对话框内的控件,并能改变控件的大小。 靠齐上边靠齐上边 左右间隔相等左右间隔相等 大小相同大小相同靠齐左边靠齐左边上下居中上下居中宽度相同宽度相同 显示标尺显示标尺

32、 靠齐右边靠齐右边 左右居中左右居中 高度相同高度相同测试对话框测试对话框 靠齐下边靠齐下边 上下间隔相等上下间隔相等显示网格显示网格控件的布局控件的布局 大多数布置控件的命令使用前,都需要用户选大多数布置控件的命令使用前,都需要用户选取多个控件,且取多个控件,且“主要控件主要控件”起到了关键作用。只起到了关键作用。只改变其它控件的大小,并与改变其它控件的大小,并与“主要控件主要控件”的尺寸一的尺寸一致。设置的方法是按住致。设置的方法是按住Ctrl或或Shift键,然后用鼠标键,然后用鼠标单击所要指定的控件即可。单击所要指定的控件即可。 为了便于用户在对话框内精确定位各个控件,系为了便于用户在

33、对话框内精确定位各个控件,系统还提供了网格、标尺等辅助工具。一旦网格显示,统还提供了网格、标尺等辅助工具。一旦网格显示,添加或移动控件时都将自动定位在网格线上。添加或移动控件时都将自动定位在网格线上。2.5 创建对话框类创建对话框类 在应用程序中使用添加的对话框须先为该对话框模板在应用程序中使用添加的对话框须先为该对话框模板创建一个用户对话框类。创建一个用户对话框类。在对话框资源模板的空白区域在对话框资源模板的空白区域(没有其他元素或控件没有其他元素或控件)内双击鼠标,将弹出对话框内双击鼠标,将弹出对话框 。 在在Name框中输入类名框中输入类名CFirstDlg,单击,单击OK按钮,一个按钮

34、,一个基于对话框资源模板的用户对话框类基于对话框资源模板的用户对话框类CFirstDlg就创建好了。就创建好了。此时出现此时出现MFC ClassWizard(MFC类向导类向导)对话框。对话框。 2.6 添加对话框代码添加对话框代码 (添加类成员添加类成员) 在在MFC ClassWizard对话框中,可以看到对话框中,可以看到“Class name”组合框已经是组合框已经是CFirstDlg。 单击单击Add Function按钮按钮或双击或双击WM_INITDIALOG消消息,息,MFC ClassWizard自动自动为为CFirstDlg类添加类添加OnInitDialog函数。函数。

35、 在在Member functions表框中选表框中选择刚添加的成员函数择刚添加的成员函数,单击单击Edit Code 将出现函数代码编辑窗将出现函数代码编辑窗口,可以编辑相应的代码。口,可以编辑相应的代码。2.7 在程序中使用对话框在程序中使用对话框 当用户对话框类建立后当用户对话框类建立后就可在应用程就可在应用程序中添加该对话框类的包含头文件,然序中添加该对话框类的包含头文件,然后定义该类的对象,通过对象来调用类后定义该类的对象,通过对象来调用类的成员。的成员。例:例: 在程序中使用对话框在程序中使用对话框 (1) 在项目工作区窗口中选择在项目工作区窗口中选择ResourceView页面,

36、双击页面,双击资源资源“Menu”项中的项中的IDR_MAINFRAME,则菜单编辑器窗,则菜单编辑器窗口出现在主界面的右边,相应的口出现在主界面的右边,相应的Ex_SDI项目的菜单资源被项目的菜单资源被显示出来,在菜单的最后一项,显示出来,在菜单的最后一项,Visual C+为用户留出了为用户留出了一个空位置,用来输入新的菜单项,如图一个空位置,用来输入新的菜单项,如图 例:在程序中使用对话框例:在程序中使用对话框 (2) 在菜单的空位置上双击鼠标左键,则出现它的属性对在菜单的空位置上双击鼠标左键,则出现它的属性对话框,在标题框中输入话框,在标题框中输入“测试测试(&T)”,结果如图所示,其

37、中符,结果如图所示,其中符号号&用来其后面的字符作为该菜单项的助记符,这样当按住用来其后面的字符作为该菜单项的助记符,这样当按住“Alt”键不放,再敲击该助记符键时,对应的菜单项就会被键不放,再敲击该助记符键时,对应的菜单项就会被选中,或在菜单打开时,直接按相应的助记符键,对应的菜选中,或在菜单打开时,直接按相应的助记符键,对应的菜单项也会被选中。单项也会被选中。 例:在程序中使用对话框例:在程序中使用对话框 (3) 单击菜单属性对话框中的单击菜单属性对话框中的“保存可见保存可见”(Keep Visible)按钮,使此属性对话框一直可见,以方便操作。单击按钮,使此属性对话框一直可见,以方便操作

38、。单击“测试测试”菜单项下方的空位置,在属性对话框中,输入标题菜单项下方的空位置,在属性对话框中,输入标题“对话框对话框(&D)”,在在ID框输入该菜单项的资源标识框输入该菜单项的资源标识ID_TEST_DLG,结果,结果如图所示,单击属性对话框右上角的关闭按钮。如图所示,单击属性对话框右上角的关闭按钮。 例:在程序中使用对话框例:在程序中使用对话框 (4) 用鼠标将新添加的菜单项拖到用鼠标将新添加的菜单项拖到“查看查看”和和“帮助帮助”菜单菜单项项 之间,结果如图所示。之间,结果如图所示。 菜单项菜单项“对话框对话框”拖放后的位置拖放后的位置(5) 选择选择“查看查看”“建立类向导建立类向导

39、”菜单命令或直接按菜单命令或直接按Ctrl+W快捷键,则出现快捷键,则出现MFC ClassWizard对话框,该对话框会自动切对话框,该对话框会自动切换到换到Message Maps页面。页面。(6) 从从“Class name”组合框中选择组合框中选择CMainFrame,在,在Object Ids列表中选择列表中选择ID_TEST_DLG,然后在,然后在Messages框中选择框中选择COMMAND消息。消息。 例:在程序中使用对话框例:在程序中使用对话框 (7) 单击单击Add Function按钮或双击按钮或双击COMMAND消息,出消息,出现现“Add Member Functio

40、n”对话框以输入成员函数的名。对话框以输入成员函数的名。系统默认的函数名为系统默认的函数名为OnTestDlg,如图所示。该函数是对,如图所示。该函数是对单项单项ID_TEST_DLG的映射,也就是说,当在应用程序运的映射,也就是说,当在应用程序运时,用户选择时,用户选择“对话框对话框”,则该函数,则该函数OnTestDlg被调用,被调用,执行函数中的代码。执行函数中的代码。 例:在程序中使用对话框例:在程序中使用对话框(8) 单击单击OK按钮,在按钮,在ClassWizard的的“Member functions”列表中将列出新增加的成员函数。选择此函数,列表中将列出新增加的成员函数。选择此

41、函数,单击单击Edit Code按钮按钮(或直接在函数名双击鼠标或直接在函数名双击鼠标),在此成员,在此成员函数中添加下列代码:函数中添加下列代码:void CMainFrame:OnTestDlg() CFirstDlg dlg;/ 定义对话框类对象定义对话框类对象 dlg.DoModal();/ 显示对话框显示对话框 代码中,代码中,DoModal是是CDialog基类成员函数,它是用来基类成员函数,它是用来显示和终止模式对话框。显示和终止模式对话框。例:在程序中使用对话框例:在程序中使用对话框(9) 在在OnTestDlg函数的实现文件函数的实现文件MainFrm.cpp的前面添加的前面

42、添加CFirstDlg类的头文件包含,即:类的头文件包含,即:#include Ex_SDI.h#include MainFrm.h#include FirstDlg.h“(10) 编译并运行。在应用程序菜单上,选择编译并运行。在应用程序菜单上,选择“测试测试” “对对话框话框”菜单项,将出现如图的对话框,这个对话框就是刚才菜单项,将出现如图的对话框,这个对话框就是刚才添加的对话框。添加的对话框。3 使用无模式对话框使用无模式对话框1. 模式对话框模式对话框 模式对话框:模式对话框:是指当对话框被弹出,用户必须在对是指当对话框被弹出,用户必须在对话框中作出相应的操作,在退出对话框之前,对话框话

43、框中作出相应的操作,在退出对话框之前,对话框所在的应用程序不能继续执行。所在的应用程序不能继续执行。 一般情况下,模式对话框会有一般情况下,模式对话框会有OK(确定确定)和和Cancel(取消取消)按钮。单出按钮。单出OK按钮,系统认定用户按钮,系统认定用户在对话框中的选择或输入有效,对话框退出;单击在对话框中的选择或输入有效,对话框退出;单击Cancel按钮,对话框中的选择或输入无效,对话框按钮,对话框中的选择或输入无效,对话框退出,程序恢复原有状态。退出,程序恢复原有状态。2. 无模式对话框无模式对话框 无模式对话框:是指当对话框被弹出后,一无模式对话框:是指当对话框被弹出后,一直保留在屏

44、幕上,用户可继续在对话框所在的直保留在屏幕上,用户可继续在对话框所在的应用程序中进行其它操作;当需要使用对话框应用程序中进行其它操作;当需要使用对话框时,只需象激活一般窗口一样单击对话框所在时,只需象激活一般窗口一样单击对话框所在的区域即可激活。的区域即可激活。例:例:创建并使用无模式对话框创建并使用无模式对话框(1)用用MFC AppWizard(exe)创建一个默认的单创建一个默认的单文档应用程序文档应用程序x_Modeless。(2) 在该项目中添加一个对话框资源,将其标识在该项目中添加一个对话框资源,将其标识符设为符设为IDD_DIALOG_SECOND,标题设为,标题设为“无模式对话

45、框无模式对话框”,(3) 对话框字体和大小设为对话框字体和大小设为“宋体,宋体,9号号”。为。为IDD_DIALOG_SECOND对话框资源创建一个对话框资源创建一个对话框类对话框类CSecondDlg。 例:例:创建并使用无模式对话框创建并使用无模式对话框(4)打开打开MFC ClassWizard,从,从“Class name”列表中选列表中选择择CSecondDlg,在,在IDs列表中选择列表中选择IDOK,是对话框中,是对话框中OK 按钮的标识符,然后在按钮的标识符,然后在Messages框中选择框中选择BN_CLICKED (单击按钮单击按钮)消息,单击消息,单击Add Functi

46、on按按钮或双击钮或双击BN_CLICKED消息,出现消息,出现“Add Member Function”对话框以输入成员函数的名称,保留系统默认对话框以输入成员函数的名称,保留系统默认的函数名为的函数名为OnOK,如图所示。,如图所示。例:例:创建并使用无模式对话框创建并使用无模式对话框(5) 修改修改CSecondDlg:OnOK函数中的代码。函数中的代码。void CSecondDlg:OnOK() / 添加其他代码使用户输入对话框的数据有效添加其他代码使用户输入对话框的数据有效 DestroyWindow(); / 终止对话框显示终止对话框显示 delete this; / 删除对话框

47、,释放内存空间删除对话框,释放内存空间代码中,代码中,DestroyWindow是对话框基类是对话框基类CWnd的一个成员函数,用来终止窗口。的一个成员函数,用来终止窗口。例:例:创建并使用无模式对话框创建并使用无模式对话框(6) 添加添加Cancel按钮按钮(标识符为标识符为IDCANCEL)的的BN_CLICKED消息映射,并修改其映射函数消息映射,并修改其映射函数CSecondDlg:OnCancel的代码。的代码。void CSecondDlg:OnCancel() / 单击单击Cancel(取消取消)按钮按钮 DestroyWindow(); delete this; 例:例:创建并

48、使用无模式对话框创建并使用无模式对话框(7) 在项目工作区窗口中选择在项目工作区窗口中选择ResourceView页面,双页面,双击资源击资源“Menu”项中的项中的IDR_MAINFRAME,打开菜单,打开菜单资源。资源。(8) 在菜单在菜单“查看查看”与与“帮助帮助”之间添加一个之间添加一个“测试测试(&T)”菜单,该菜单项的资源标识设为菜单,该菜单项的资源标识设为ID_TEST_DLG。(9) 按按Ctrl+W快捷键,打开快捷键,打开MFC ClassWizard对话框,对话框,在在Message Maps页面中从页面中从“Class name”列表中选列表中选择择CMainFrame,

49、在,在Object IDs列表中选择列表中选择ID_TEST_DLG,然后在,然后在Messages框中选择框中选择COMMAND消息。消息。 例:例:创建并使用无模式对话框创建并使用无模式对话框(10) 单击单击Add Function按钮或双击按钮或双击COMMAND消息,出现消息,出现“Add Member Function”对话框,取系统默认的函数名对话框,取系统默认的函数名OnTestDlg,并在此成员函数中添加下列代码:,并在此成员函数中添加下列代码:void CMainFrame:OnTestDlg() CSecondDlg *pDlg = new CSecondDlg; / 使

50、用使用new为对分配内存空间为对分配内存空间 pDlg-Create( IDD_DIALOG_SECOND ); / 创建对话框创建对话框 pDlg-ShowWindow( SW_NORMAL ); / 显示对话框显示对话框代码中,代码中,Create可用来以一个对话框资源来创建对话框,可用来以一个对话框资源来创建对话框, ShowWindow是一个是一个CWnd成员函数,用来显示对话框,成员函数,用来显示对话框, SW_NORMAL是用来指定将窗口显示成一般常用的状态。是用来指定将窗口显示成一般常用的状态。 例:例:创建并使用无模式对话框创建并使用无模式对话框(11) 在文件在文件MainF

51、rm.cpp前面添加前面添加CSecondDlg类的文件包含类的文件包含 #include MainFrm.h #include SecondDlg.h (12) 编译并运行。在应用程序菜单上,多次选择编译并运行。在应用程序菜单上,多次选择“测试测试” “对对话框话框”菜单项,将会在同一个位置中出现多个对话框,拖动这菜单项,将会在同一个位置中出现多个对话框,拖动这些对话框到适当位置,如图些对话框到适当位置,如图:模式和无模式对话框在模式和无模式对话框在用编辑器设计和使用用编辑器设计和使用MFC ClassWizard创建创建用户对话框类的方法是用户对话框类的方法是一致的,但在对话框的一致的,但

52、在对话框的创建和退出的方式是不创建和退出的方式是不同的。同的。 10.4 通用对话框和消息对话框通用对话框和消息对话框10.4 10.4 通用对话框通用对话框 通用对话框是系统定义的对话框,为用户提通用对话框是系统定义的对话框,为用户提供了一组标准接口,可以使用通用对话框来执行供了一组标准接口,可以使用通用对话框来执行各种标准操作,如选择文件名(用于打开和保存各种标准操作,如选择文件名(用于打开和保存文件)、选择字体、选择颜色、进行打印和打印文件)、选择字体、选择颜色、进行打印和打印设置、正文查找和替换等通用操作。设置、正文查找和替换等通用操作。MFCMFC类库提类库提供了五个从供了五个从Cd

53、ialogCdialog类派生的通用对话框,封装类派生的通用对话框,封装了通用对话框的功能。了通用对话框的功能。通用对话框通用对话框 Windows提供了一组标准用户界面对话框,它们都有提供了一组标准用户界面对话框,它们都有相应的相应的MFC库中的类来支持,所有这些通用对话框类库中的类来支持,所有这些通用对话框类都是从一个都是从一个公共的基类公共的基类CCommonDialog派生派生而来的。而来的。对话框对话框用用 途途CColorDialog颜色对话框,允许用户选择或创建颜色颜色对话框,允许用户选择或创建颜色CFileDialog文件对话框,允许用户打开或保存一个文件文件对话框,允许用户打

54、开或保存一个文件CFindReplaceDialog查找替换对话框,允许用户查找或替换指定字符串查找替换对话框,允许用户查找或替换指定字符串CPageSetupDialog页面设置对话框,允许用户设置页面参数页面设置对话框,允许用户设置页面参数CFontDialog字体对话框,允许用户从列出的可用字体中选择一种字体字体对话框,允许用户从列出的可用字体中选择一种字体CPrintDialog打印对话框,允许用户设置打印机的参数及打印文档打印对话框,允许用户设置打印机的参数及打印文档 这些对话框都有一个共同特点:它们都从用户获取这些对话框都有一个共同特点:它们都从用户获取信息,但并不对信息作处理,用

55、户可以在程序中直接信息,但并不对信息作处理,用户可以在程序中直接使用这些通用对话框。使用这些通用对话框。10.4.1 10.4.1 CColorDialogCColorDialog类类10.4.2 10.4.2 CFileDialogCFileDialog类类10.4.3 10.4.3 CFindReplaceDialogCFindReplaceDialog类类10.4.4 10.4.4 CFontDialogCFontDialog类类10.4.5 10.4.5 CPrintDialogCPrintDialog类类10.4.6 10.4.6 通用对话框应用举例通用对话框应用举例10.4.1 C

56、ColorDialog类 CColorDialog CColorDialog类封装了标准的颜色对话框。类封装了标准的颜色对话框。颜色对话框如图颜色对话框如图10.2610.26所示,在所示,在WindowsWindows的画图程序的画图程序中,如果用户在颜色面板的某种颜色上双击鼠标,中,如果用户在颜色面板的某种颜色上双击鼠标,就会显示一个编辑颜色对话框来让用户选择颜色。就会显示一个编辑颜色对话框来让用户选择颜色。1 1使用颜色对话框的步骤使用颜色对话框的步骤(1) (1) 创建创建CColorDialogCColorDialog类的对象;类的对象;(2) (2) 设置或修改对象的数据成员设置或

57、修改对象的数据成员m_ccm_cc,以便初始化对,以便初始化对话框。话框。m_ccm_cc的类型为的类型为CHOOSECOLORCHOOSECOLOR;(3) (3) 然后调用然后调用CColorDialog:DoModalCColorDialog:DoModal( )( )来启动对话来启动对话框,以便用户从中选择颜色。根据框,以便用户从中选择颜色。根据DoModalDoModal()()返回的返回的是是IDOKIDOK还是还是IDCANCELIDCANCEL可知道用户是否确认了对颜色可知道用户是否确认了对颜色的选择;的选择;(4) (4) 如果如果DoModalDoModal()()返回返回

58、IDOKIDOK,那么选择信息保存在,那么选择信息保存在m_ccm_cc中。可以直接访问中。可以直接访问m_ccm_cc或者调用表或者调用表10.2110.21所示的所示的CColorDialogCColorDialog类的成员函数来获取或设置颜色。类的成员函数来获取或设置颜色。2 2CColorDialogCColorDialog类的主要成员函数类的主要成员函数表表10.2110.21列出了列出了CColorDialogCColorDialog类的主要成员函数。类的主要成员函数。10.4.2 CFileDialog10.4.2 CFileDialog类类CFileDialogCFileDia

59、log类用于实现文件选择对话框,类用于实现文件选择对话框,以支持文件的打开和保存操作。用以支持文件的打开和保存操作。用MFC MFC AppWizardAppWizard建立的应用程序中自动加入了文建立的应用程序中自动加入了文件选择对话框,在件选择对话框,在FileFile菜单选菜单选OpenOpen或或Save Save AsAs命令会启动它们。命令会启动它们。1使用文件对话框的步骤使用文件对话框的步骤(1) (1) 创建一个创建一个CFileDialogCFileDialog类的对象;类的对象;文件对话框的构造函数为文件对话框的构造函数为CFileDialog( BOOL bOpenFil

60、eDialogCFileDialog( BOOL bOpenFileDialog, , LPCTSTR LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL,DWORD lpszDefExt = NULL, LPCTSTR lpszFileName = NULL,DWORD dwFlags = OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT, dwFlags = OFN_HIDEREADONLY| OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL,CWndLPCTST

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论