一个属性表单由一个或多个属性页组成。它有效地解决了大量信息无法在一个对话框上显示这一问题。
1、创建属性页
为了创建属性表单,首先需要创建属性页,后者对应的MFC类是CPropertyPage,该类生成的对象代表了属性表单中一个单独的属性页。
在资源编译器下添加3个属性页资源,并修改这三个属性页资源的ID及标题(Caption属性),属性页的标题就是最终在属性页上显示的选项卡的名称。有三种类型的属性页,如图:
说明:如果知道了属性页资源与对话框资源之间的属性区别,也可以在程序中先增加一个普通对话框资源,然后修改其属性,使其符合属性页资源的要求,然后把它当作属性页资源来使用。
为每一个属性页生成相应的属性页类,基类是CPropertyPage。
2、创建属性表单
为了创建一个属性表单,首先需要创建一个对象,接下来在此对象中为每一个属性页创建一个对象(CPropertyPage类型),并调用AddPage函数添加每一个属性页,然后调用DoModal函数显示一个模态属性表单,或调用Create函数创建一个非模态属性表单。
(1)创建一个基类为CPropertySheet的类CPropSheet。
(2)CPropSheet类头文件中为先前创建的三个属性页分别定义一个成员变量。注意包含相应头文件。
CProPage1 m_page1; CProPage2 m_page2; CProPage3 m_page3;
(3)添加属性页对象。
通常都是在属性表单的构造函数中添加属性页对象。属性表单有两个构造函数:
CPropSheet::CPropSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(nIDCaption, pParentWnd, iSelectPage) { } CPropSheet::CPropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(pszCaption, pParentWnd, iSelectPage) { }
iSelectPage指定的是属性表单初始选择的属性页,默认值是第一个页面。因为属性表单有两个构造函数,在构造属性表单对象时,可任选其中一个构造函数。
CPropSheet::CPropSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(pszCaption, pParentWnd, iSelectPage) { AddPage(&m_page1); AddPage(&m_page2); AddPage(&m_page3); }
(4)显示属性表单。
CPropertySheet类是从CWnd类派生来的,而不是派生于CDialog类。但CPropertySheet对象与CDialog对象的操作方式是类似的。调用DoModal函数显示一个模态属性表单,或调用Create函数创建一个非模态属性表单。
如果要在初始化时就显示属性表单,需要在OnInitDialog函数中操作: