许多程序员都欣赏WINDOWS提供的属性表,属性表是包含控件页的标签式对话框,用户通过单击鼠标在其间切换。本文将简单介绍一下属性标的编程实现。
属性表的功能都合理的封装在一对MFC类———CPropertySheet和CPropertyPage中。
CPropertySheet代表属性表本身,是从CWnd派生出来的。
CPropertyPage代表属性表的页,是从CDialog派生出来的。
和对话框一样,属性表可以是有模式和无模式的。
CPropertySheet::DoModal创建有模式属性表,
而CPropertySheet:::Create创建无模式属性表。
创建属性表的步骤如下:
1.针对属性表的每一页创建一个对话框模板,定义页的内容和特性,将对话框标题设置成您希望在属性表页上方标签中显示的标题。
2.针对属性表的每一页由CPropertyPage派生出一个类似对话框的类。
3.由CPropertySheet派生出一个属性表类。将属性表类和第2步中得到的属性表页类实例化。利用CPropertySheet::AddPage将各页按预期的顺序添加到属性表中。
4.调用属性表的DoModal函数将属性表显示在屏幕上。
下面举一个实例,简单的描述一下构建一个属性表的过程。
首先用VC生成一个基于单文档的工程,其名为SheetTest
在资源中插入两个对话框Dialog1和Diaog2.
用ClassWizad基于两个对话框分别生成两个新类CFirstPage、CSecondPage。
注意,在设定基类时选择CPropertyPage,生成代码如下:
class CFirstPage : public CPropertyPage
{
public:
CFirstPage();
~CFirstPage();
protected: virtual void DoDataExchange(CDataExchange* pDX);
// DDX/DDV support
};
class CSecondPage : public CPropertyPage
{
public:
CSecondPage();
~CSecondPage();
protected: virtual void DoDataExchange(CDataExchange* pDX);
// DDX/DDV support
};
用ClassWizad分别生成新类CMyPropertySheet,从CPropertySheet派生。
在类中添加上面定义的两个类的对象。并在类的构造函数中,将两个对象加载到属性表中,代码如下:
class CMyPropertySheet: public CPropertySheet
{
public:
CMyPropertySheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0); CMyPropertySheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0)
{
AddPage(&m_FirstPage); AddPage(&m_SecondPage);
}
virtual ~CMyPropertySheet();
public:
CFirstPage m_FirstPage;
CSecondPage m_SecondPage;
};
在需要显示属性表的地方加入如下的代码,就可以显示出属性表。
CMyPropertySheet dlg(_T("MyPropertyTest"));
dlg.DoModal();
大功告成。