📄 08.2.1 创建属性页.txt
字号:
8.2.1 创建属性页
为了创建属性表单,首先需要创建属性页,后者对应的MFC类是CPropertyPage ,其
继承层次结构如图8.26所示,该类生成的对象代表了属性表单中一个单独的属性页。可以看到, CPropertyPage类是从CDialog派生而来的,因此,一个属性页窗口其实就是一个对话框窗U。根据前面章节的知识,我们知道为了创建一个对话框窗口,首先需要创建一个对话框资源。选择 VC++开发环境窗口上的【Insert
图 8.26 CPropertyPage类的继承层次结构 Resource..】菜单命令,
在弹出的Insert Resource
对话框左边的Resource type列表中单击Dialog类型前面的"+"号,即可以看到其下有三种属性页资源: IDD_PROPPAGE_LARGE、
IDD_PROPPAGE_MEDIUM
IDD_PROPPAGE_SMALL,
如图8.27所示。
为我们新建了一个属性页资源: IDD PROPPAGE LARGE。按照同样的方法,再插入两个属性页资源。然后按照表 8.1中所列内容修改这三个属性页资源的m及标题 CCaption属性)。
表8.1属性页资源属性设置
序 号 D Caption
IDO PROPl Page l
2 lDO PROP2 Page2
3 日)0 PROP3 Page3
巧合·细ifl屈一个属性页的标题就是最终在属性页上显示的选项卡的名称。
现在,让我们看看插入的属性页资源和通常插入的对话框资源之间的区别。如图8.28所示的是 Prop工程中 AppWizard自动为我们创建的关于对话框资源的属性对话框;如图
8.29所示的是我们刚刚新建的第一个属性页资源的属性对话框。
通过比较图8.28和图8.29,可以看出,这两种对话框资源的区别如表8.2中所列。
表8.2普通对话框资源和属性页资源的属性区别
选 项 关于对话框资源 属性页资源
Style Popup Child
Border OiaJog Frame Thin
System menu 选中 未选中
接着,再比较一下这两种资源的属性对话框中的 More Styles选项卡中的选项,如图
8.30所示的是对话框资源的More Styles属性,如图8.3 1所示的是属性页资源的More Styles 属性。可以看到,属性页资源选择了Disabled选工页,这样,该属性页在初始显示时是不能使用的,而对话框资源则没有选中此选工页。
知道了这两种资源之间的区别,你也可以在程序中先增加一个普通对话框资源,然后
性,使其符合属性页资源的要求,然后把它当作属性页资源来使用。
下面,我们继续完成Prop程序中属性表单的创建。首先删除Prop程序中各个属性页' 资源上己有的静态文本控件,然后在每一个属性页中增加一些控件。在第一个属性页中放置一个组框 (GroupBox),组框可以用来起一个分组的作用,可以把相关的一些选项放置在一个组框中。例如,在如图 8.16所示的属性页中,根据其第一个组框的标题: Window settings,就可以知道该组框内的选项是一些与窗口有关的设置。
将新添加的这个组框的标题修改为:请选择你的职业。然后在这个组框内放置三个单选按钮 (RadioButton)。再在第一个属性页上放置一个列表框控件,这种类型的控件提供了信息的一种简单的组织方式,可以排列一些字符串提供给用户进行选择。然后,在该列表框上放置一个静态文本控件,这种控件主要起标示作用,本例将其文本属性修改为:"请选择你的工作地点"。最后应该调整一下各个控件的位置,使其美观些。第一个属性页资源最后的效果如图8.32所示。
接下来,同样在第二个属性页上也摆放一些控件。首先放置一个组框,将其标题修改为 :"请选择你的兴趣爱好"。因为一个人可能有多个兴趣爱好,所以我们选择复选框来设置各种兴趣爱好选工页。本例添加四个复选框,井把它们的标题分别修改为 :"足球"、"篮球"、"排球"、"游泳 "。然后调整各个控件的摆放位置,最终得到的第二个属性页资源如图 8.33所示。
图 8.33第二个属性页上控件的设置
最后,在第三个属性页中也添加一些控件。首先增加一个组合框。增加组合框时应注意:拖放时要将它的范围拉得大些,否则在程序运行时单击它右边的下拉箭头时,显示的下拉空间很小,无法将其下拉框中的内容显示出来。利用 VC++开发环境的【 Layout飞 Test】菜单命令,可以测试对话框资源运行时的外观。如果在对话框资源上放置组合框时,由于其拖放范围较小,这时,当我们单击组合框右边向下的箭头时,组合框的下拉列表部分将无法显示出来,如图 8. 3 4所示。这时,如果想调整该组合框下拉列表部分的范围,方法是在对话框资源处于编辑状态时,把鼠标移动到该组合框控件右边向下的箭头上,当鼠标变成丑形状时,单击鼠标左键,然后把鼠标移动到该组合框下端的深蓝色选中小方块上,并当鼠标变成双向箭头形状时〈如图 8 . 3 5所示 ),按下鼠标左键井向下拖动,直到把组合框的下拉列表范围拖动到合适大小时松开鼠标左键。修改完后,再利用【 Tes t】命令,测试该对话框资源,单击组合框右边向下的箭头时,就会发现它的下拉列表部分可以显示出来了,如图 8.36所示。
:在设计对话框时,可以利用 [Layout]菜单下的 [Test]菜单命令,
或者窗口底部的 Dialog工具条最前面的 Test按钮霄,测试当前对话框资源,
包括属性页最终的运行效果。之后,按下 Esc键,即可关闭对话框资源的测试,
回到编辑窗口。
图 8.35 修改组合框下拉列表范围的操作示意图 8.36能够显示组下拉框中的内容
组合框提供了编辑框加列表框的功能, VC++提供了三种类型的组合框,读者可以打开组合框控件的属性对话框,井单击 Styles选项页,然后单击Type选项组合框右边的下拉箭头,可以看到有三种类型(如图8.37所示):
图 8.37 组合框控件的属性对话框
·简易式
CSimple)这种类型的组合框包含一个编辑框和一个总是显示的列表框。
·下拉式
CDropdown)
类似于简易式组合框,二者的区别在于下拉式组合框仅当单击下拉箭头后,列表框才会弹出。
·下拉列表式 CDrop List) 下拉列表式组合框也有一个下拉的列表框,但它的编辑框是只读的,不能输入字符。也就是说,这种类型的组合框只能从其下拉列表中选择内容。本例选择Drop List类型。最后,在第三个属性页上,在添加的组合框控件上方摆放一个静态文本框,并将其标题设置为:"请选择你的薪资水平"。
现在, Prop程序有了三个属性页对话框资源,那么就要针对这三个资源生成相应的属性页类。方法是选择VC++开发环境窗口上的【View\ClassWizard】菜单命令,这时会弹
出如图 8.38所示的对话框。
该对话框提示IDDPROP1是一个新资源,可以为它创建一个新的类。单击【OK】按钮,将弹出如图8.39所示的添加新类对话框。在此对话框中,设定新类的名称: CProp1. 并把它的基类选择为: CPropertyPage,然后确保DialogID是IDD PROP1。
|、
单击如图8.39所示对话框上的【OK】按钮,完成新类的添加,并返回到ClassWizard 窗口。然后单击 ClassWizard对话框上的【Add Class】按钮,从弹出的下拉菜单中选择 < New】菜单命令,即可弹出如图 8.39所示的添加新类对话框,利用同样的方法为 IDD_PROP2和IDD PROP3分别添加一个新类: CProp2和CProp3。然后单击ClassWizard 对话框上的【OK】按钮,关闭该对话框。
在实际编程过程中,有时在利用上述方法添加新类后,可能会出现这样的现象:系统会提示无法打开新类的源文件和头文件。这是 VC++自身的问题。实际上,这时程序已经完成了新类的添加,只不过这个类的信息没有记录在ClassWizard中。在ClassWizard对话框的Classname下拉列表中找不到这个新添加的类名,但这个类确实是一个完整的类,它有源文件和头文件。为了解决这个问题,即如何让 ClassWizard找到新添加的类,可以按照以下步骤来进行:
固保存工程。
②利用【File\CloseWorkspace】菜单命令关闭当前工作区。
③在Windows资源浏览器中找到该工程所在的目录,并找到.c1w文件,该文件存储的就是 ClassWizard的一些相关信息,也就是说,关于这个工程的各个类的一些信息就记录在这个文件中。删除这个文件。
因回到VC++开发环境,打开刚刚关闭的工程,选择【View\ClassWizard】菜单命令,系统会弹出一个如图8.40所示的对话框,该对话框提示ClassWizard的数据库(I1P.clw 文件〉并不存在,询问用户是否愿意从工程的源文件中创建这个数据库。
回单击 【是】按钮,就会弹出如图 8.4 1所示的对话框,通常不需要对此对话框进行
任何修改,直接单击【OK】按钮即可,完成.clw文件的创建。这时,就会发现在ClassWizard 对话框的Classname下拉列表中就可以看到先前添加的新类了。
图 8.4 1创建.c1w文件对话框
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -