第6章 创建和使用对话框
精讲
对话框是一种用户界面,几乎每一个Windows程序都使用对话框与用户进行交互。对话框可能是一个简单的只含有OK按钮的消息框,也可以是一个复杂的数据输入表单。对话框上有一些方便用户输入的控件,对话框依靠这些控件与用户进行交互,其实质是一个接收消息的窗口。
在本章节我们主要讲述模式对话框和无模式对话框的原理和使用方法,下一章将详细介绍各种控件的使用。你将学习创建一个对话框,使用对话框模板编辑一个对话框资源,并在程序中调用对话框的方法。
6.1 对话框的基本原理
6.1.1 对话框的工作原理
在创建一个对话框之前,我们先来了解一下对话框是如何工作的,对话框的数据来自三方面:
对话框资源、对话框对象、和一个文档对象:
1.对话框资源
对话框资源是一个用户输入或取得数据的图形界面。这个图形界面是使用Develop Studio的对话框编辑器在对话框模板上创建的,程序员可以在对话框模板上增加并编辑控件,生成对话框资源。当应用程序运行时,就可以得到一个对话框。
2.对话框对象
MFC使用CDialog类来描述对话框,它是CWnd类的派生类。在CWnd类的基础上增加了数据交换的功能。当创建一个新的对话框资源后,使用ClassWizard可以创建一个对话框类的派生类。对话框对象实现了对话框和应用程序之间的通信。在应用程序中定义一个对话框对象后,在对话框显示前,可以通过访问对话框对象的成员变量为一个对话框的控件初始化,在对话框关闭后,可以通过访问对话框对象的成员变量获得用户的输入数据。
3.文档对象
MFC使用文档对象描述应用程序处理的数据,用户输入的数据要进一步的处理,通常要先存贮到文档对象中。例如:一个学生记录处理的应用程序,用户通过一个对话框输入学生记录并贮存到一个文件中。应用程序的处理顺序是:用户在对话框中输入信息,通过对话框对象得到输入信息,将输入信息整理到文档对象中,使用序列化函数将文档对象存贮到一个文件中,所以文档对象扮演了一个很重要的数据交换的角。
MFC使用以上三者实现用户与应用程序之间数据交换,数据交换流程见图6-1所示,遵循四个步骤。
图6-1 对话框基本原理
6.1.2 对话框的类型
对话框分为模式对话框和无模式对话框两种。
当一个模式对话框打开了,在其关闭之前,用户不能转向其它用户界面对象,只能与该对话框进行交互。我们平时接触到的对话框,大多数都是模式对话框,例如,一个执行菜单命令File->Save后,Save对话框被打开后,用户不能再做其它工作,只能保存完文件或取消保存文件,关闭对话框窗口后,才能做其它工作。
无模式对话框恰恰相反,当用户打开一个无模式对话框,对话框停留在屏幕上,仍然允许用户与其它用户界面对象进行交互。无模式对话框最典型的例子是在Word中使用的查与替换对话框,打开该对话框后,可以交替地进行文档编辑,和查替换操作。
从第一节的介绍可以看到对话框的设计任务主要包括对话框资源模板的设计,对话框类的设计和对话框的运行,绝大多数对话框的创建任务,模式对话框和无模式对话框都是相同的,只有在对话框与应用程序代码的交互中,也就是对话框的运行中,两者有明显的区别。
6.2设计对话框资源
6.2.1创建对话框
使用AppWizard生成的单文档或多文档应用程序,只有一个默认的About对话框,用于显示应用程序版本信息。需要使用对话框模板创建自己的对话框资源。
Develop Studio提供的对话框模板创建了一个基本界面,包括一个OK(确定)按钮和一个Cancel(取消)按钮等。你可以移动、修改、删除这些控件,或者是增加新的控件到对话框模板,构成应用程序所需的对话框资源。
创建一个对话框资源到工程的步骤:
(1)使用AppWizard生成一个单文档的MFC应用程序Exam6_1。
(2)选择Insert->Resource菜单命令。
控件的使用(3)在弹出的Insert Resource对话框左边的列表中选择Dialog,单击New按钮。
(4)在项目工作区中选择ResourceView面板,展开Dialog文件夹,可以看到增加了一个对话框资源IDD_DIALOG1,如图6-2所示,双击IDD_DIALOG1,在编辑区出现一个对话框模板。
控件工具栏
对话框模板
对话框资源ID
图6-2  Exam6_1对话框设计_新建对话框资源
6.2.2增加控件
一个控件是能够放置在一个对话框中,提供应用程序与用户交互的某种功能。例如,Edit Box提供用户文本输入的场所,一组Radio Button提供用户对某一主题的单项选择。MFC将控件设计为对话框窗口的子窗口,控件通过事件通知消息与父窗口联系。
在一个对话框资源中增加控件的操作十分方便,只需从图6-2所示的控件工具栏中选中要增加的控件,再将此控件拖拉至对话框模板中的确定位置上,松开鼠标按键即生成一个控件。调整控件的位置和大小的操作与Word中对文本框的操作完全一样。
在默认情况下,控件工具栏总是打开的,如果没有打开,可以在Develop Studio工具栏后的空白处,单击鼠标右键,在弹出的快捷菜单中选择Controls,便可打开控件工具栏。
  图6-3中列出了VC++6.0中支持的标准控件名称,我们可以很方便地从控件工具栏中生成新的控件,但每一种控件都具有不同的特性,需要学习和掌握。
  图6-3  标准控件     
下面我们试着设计一个可以输入5门功课成绩的输入窗口,在上一节生成的对话框资源IDD_DIALOG1中做以下操作,得到如图6-4所示的对话框:
(1)调整对话框模板窗口大小,将OK和Cancel按钮移到窗口的底部。
(2)控件工具栏中选中Static Text(静态文本)控件,拖到对话框模板中。
(3)通过复制和粘贴操作,生成其它四个Static Text控件。
(4)控件工具栏中选中Edit Box控件(编辑框),拖到对话框模板中。
(5)通过复制和粘贴操作,生成其它四个Edit Box控件
图6-4 EX6对话框设计_增加控件
6.2.3设置控件属性
 一个控件相关的属性设置决定了一个控件可操作行为和显示。例如,控件的ID是控件的一个重要属性,MFC内部是以控件ID来标识一个控件,当消息产生后,是哪一个控件需要进行处理,MFC内部使用的是控件ID。
属性的设置是在与每个控件相对应的属性对话框中进行的,单击鼠标右键,在弹出的快捷菜单中选择Properties,打开属性对话框。每一种控件的属性对话框都有所不同,与其特性相关,在下一章我们将详细介绍一些常用控件的属性含义。
对上一节的对话框IDD_DIALOG1中的控件作属性设置:
(1)鼠标选中第一个Static Text对象,单击鼠标右键,在弹出的快捷菜单中选择Properties,弹出属性对话框,如图6-5所示。
图6-5 属性对话框设置
(2)修改Caption右边的文本框,输入“高等数学”,单击关闭按钮,关闭属性对话框。
(3)重复步骤(1)(2),将其它四个Static控件的Caption改为“大学物理”,“大学英语”,“哲学”和“计算机基础”。
(4)同样的操作打开5 个Edit Box控件的属性对话框,修改ID为IDC_SCORE1、IDC_SCORE2、IDC_SCORE3、IDC_SCORE4、IDC_SCORE5。
(5)打开按钮OK的属性对话框,修改Caption为“确定”。
(6)打开按钮Cancel的属性对话框,修改Caption为“取消”。
操作完毕,对话框如图6-6所示。
图6-6 EX6对话框设计_设置属性
同样,对话框的属性设计也是在对话框的属性对话框中设置,在对话框任意空白处单击鼠标右键,在弹出的快捷菜单中选择Properties,如图6-7所示。在Caption中填写“成绩录入”,将成为对话框的标题,单击Font会弹出字体对话框,能设置对话框中显示的字体格式。其它的几个标签页还提供了选项,可以修改对话框窗口的显示样式,可以自己试一试。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。