5.2对话框模板的设计
利用Developer Studio提供的可视化设计工具,用户可以方便地设计对话框模板.
请读者按前面章节介绍的方法利用AppWizard建立一个名为Register的MFC应用程序,并在进入MFC AppWizard对话框后按下面几步操作:
- 在第1步中选中Single document以建立一个单文档应用程序.
- 在第4步中使Docking toolbar项不选中,这样AppWizard就不会创建工具条.
在第6步中先选择CRegisterView,然后在Base class栏中选择CEditView,这样CRegisterView将是CEditView的继承类,从而使视图具有了编辑功能.
编译并运行Register,读者会发现Register居然是个编辑器,它可以打开、编辑和保存文本文件. 当然,Register的目的不仅仅是个编辑器。假设要对某一地区的就业情况进行调查,我们希望Register程序能够登录就业情况数据并将数据存储起来.
要登录数据,用对话框是再合适不过了。一个典型的就业情况登录对话框如图5.1所示,本节的任务就是设计如图5.1的中文对话框模板.
切换至资源视图,选择Insert-Resource命令,并在Insert Resource对话框中双击Dialog项。完成后在资源视图中会出现一个名为IDD_DIALOG1的新的对话框模板资源。双击IDD_DIALOG1,则会打开该对话框模板的编辑窗口,如图5.2所示。缺省的对话框模板有OK和Cancel两个按钮,在窗口的旁边有一个控件面板,在控件面板上用鼠标选择一个控件,然后在对话框中点击,则相应的控件就被放置到了对话框模板中。图5.3显示了控件面板上的按钮所代表的控件。读者不用记忆图5.3的内容,如果不能确定控件的类型,可将鼠标在某个控件按钮上停留片刻,则会显示一个工具提示,指出该按钮所代表控件的名称。
图5.2 缺省的对话框模板
图5.3 控件面板
提示:若读者看不到控件面板,请在Developer Studio的工具条的空白处单击鼠标右键,并在随之弹出的菜单中选中Controls。读者可以在对话框模板中随意加几个控件试试看。当用鼠标选择对话框或控件时,会出现一个围绕它的虚框,拖动虚框的边界可以改变对话框或控件的大小,在Developer Studio的状态条中会显示出所选对象的坐标和尺寸。控件可以被拖动,也可以按箭头键来移动选中的控件。在拖动控件时若按住Ctrl键,则控件会被复制。
用户可以一次选择多个控件,选择的方法有两个:1。 在对话框的空白处拖动鼠标,则拖动出来的虚线框内的控件将被选中。2。在选择控件时按住Ctrl键,则可以多重选择。
选中控件或对话框后按回车键,则会弹出一个属性对话框,属性对话框用来设置控件或对话框的各种属性。属性对话框是标签式对话框,第一页是常规属性(General)。一个典型的控件属性对话框如图5.4所示.如果对属性对话框中的选项的意思不明白,可以按F1键获得帮助.
图5.4 控件属性对话框
在控件属性对话框的常规属性中,有一些控件共同的属性:
ID属性。用于指定控件的标识符,Windows依靠ID来区分不同的控件。
Caption(标题)属性。静态正文、组框、按钮、检查框、单选按钮等控件可以显示标题,用来对控件进行文字说明。控件标题中的字符&使紧跟其后的字符有下划线,按Alt+下划线将启动该控件。若控件是一个单选按钮,则Alt+下划线字符将选择该按钮;若是检查框,则相当于对该检查框按空格键;若是按钮,则将激活按钮命令;若控件是一个静态正文,则将激活按tab顺序紧随其后的下一个控件。
Visible属性。用来指定控件是否是可见的。
- Disable属性。使控件允许或禁止,一个禁止的控件呈灰色显示,不能接收任何输入。
- Tabstop属性。用户可以按Tab键移动到具有Tabstop属性的控件上。Tab移动的顺序可以由用户指定。按Ctrl+D则Tab顺序会显示出来,如图5.5,用户可以用鼠标来重新指定Tab顺序。缺省的Tab顺序是控件的创建次序。
- Group属性。用来指定一组控件,用户可以用箭头键在该组控件内移动。在同一组内的单选按钮具有互斥的特性,即在这些单选按钮中只能有一个是选中的。如果一个控件具有Group属性,则这个控件以及按Tab顺序紧随其后的所有控件都属于一组的,直到遇到另一个有Group属性的控件为止。
现在就开始进行对话框模板的设计。首先,用鼠标选中对话框,按回车键,在弹出的属性对话框中将ID改为IDD_REGISTER并指定对话框的标题为“登录数据”。需要注意的是,由于要在对话框中显示汉字,因此必须设定正确的语种和字体。请读者在工作区资源视图的Dialog类型中单击鼠标选中IDD_REGISTER项,然后按Alt+Enter键,并在弹出的属性对话框中的Language栏中选择Chinese(P.R.C.)。接着,打开模板的属性对话框,单击Font...按钮,并选择“宋体”。
接着,请将对话框模板上的所有控件删除,删除的办法是选择控件后按Del键。为了容纳所有需要的控件,需将对话框的尺寸扩大到280×180。然后,请读者按图5.1和表5.2来设计对话框模板。
提示:对话框的尺寸单位不是象素,而是与字体的大小有关。X方向上一个单位等于字符平均宽度的1/4,Y方向上一个单位等于字符平均高度的1/8。这样,随着字体的改变,对话框单位也会改变,对话框本身的总体比例保持不变。
表5.2
控件类型 ID 标题(Caption) 其它属性 组框(个人情况) 缺省 个人情况 缺省 组框(单位情况) 缺省 单位情况 缺省 静态正文(姓名) 缺省 姓名 缺省 编辑框(姓名) IDC_NAME 缺省 检查框(婚否) IDC_MARRIED 婚否 缺省 静态正文(年龄) 缺省 年龄 缺省 编辑框(年龄) IDC_AGE 缺省 组框(性别) 缺省 性别 缺省 单选按钮(男) IDC_SEX 男 Group、Tabstop 单选按钮(女) 缺省 女 缺省 组框(就业状况) 缺省 就业状况 缺省 单选按钮(在职) IDC_WORK 在职 Group、Tabstop 单选按钮(下岗) IDC_WORK1 下岗 缺省 静态正文(工作单位) 缺省 工作单位 缺省 编辑框(工作单位) IDC_UNIT 缺省 静态正文(单位性质) 缺省 单位性质 缺省 组合框(单位性质) IDC_KIND Drop List、不排序(不选中Sort风格)、初始化列表项(见下文说明) 静态正文(工资收入) 缺省 工资收入 缺省 列表框(工资收入) IDC_INCOME 不排序(不选中Sort) 按钮(确定) IDOK 确定(&Y) 缺省 按钮(取消) IDCANCEL 取消(&C) 缺省请注意组合框IDC_KIND的Drop List属性,Drop List属性是在属性对话框的Styles(风格)页的Type栏中选择的,这使得IDC_KIND成为一个下拉列表式组合框。组合框有简易式(Simple)、下拉式(Dropdown)和下拉列表式(Drop List)三种。简易式组合框包含一个编辑框和一个总是显示的列表框。下拉式组合框同简易式组合框的区别在于仅当单击下滚箭头时才出现列表框。下拉列表式组合框也有一个下拉的列表框,但它的编辑框是只读的,不能输入字符。组合框IDC_KIND不要自动排序,因此需在Styles页中使Sort项不被选中。
组合框的列表项可以在设计模板时初始化,而列表框的初始化只能在程序中进行。请读者在组合框IDC_KIND的属性对话框的General页中输入以下几个列表项,以作为单位性质的选项。输入时要注意,换行时不要按回车键,而应按Ctrl+回车键。
国有企事业
集体企业
私有企业
中外合资
外商独资
组合框控件的一个与众不同之处是它有两个尺寸,一个是下拉前的尺寸,一个是下拉后的尺寸。当用鼠标点击组合框上的箭头后,可设定下拉后的尺寸。
控件最好都放在对话框模板的蓝色虚框内,控件之间的距离不要太近,否则有可能造成不正确的显示。
安置好控件之后,下一步的任务是指定Tab顺序。按Ctrl+D键后,会显示当前的Tab顺序,通过用鼠标点击控件可以设定新的Tab顺序,如果想放弃本次修改,在对话框的空白处点击一下即可。请读者按图5.5安排Tab顺序。
图5.5 对话框的Tab顺序
最后,需要测试一下对话框。按Ctrl+T,则会弹出一个当前模板的测试对话框,这个对话框的外观和基本行为与程序中将要弹出的对话框一样。这样,读者不用编译运行程序,通过测试对话框就可以评估对话框是否合乎要求。如果发现了错误或不满意的地方,可按ESC键退出测试对话框并重新修改对话框模板。
至此,对话框模板的设计就完成了。