【最终结果图】
【简单设计流程】
1. 创建工程:根据VC向导程序创建一个Dialog Based应用程序,进入资源视图,在对话框模板上创建一个Picture控件来设置属性页的显示范围,调整好Picture到合适大小,如下图:
我们假设Picture控件的ID为IDC_SHEET_RECT。
注:这是教程,用不着过于拘泥界面的美观!
2. 创建三个属性页模板:在VC的资源视图中插入一个对话框,拖动到合适大小,修改对话框的样式,将Popup修改为Child,Border样式设置为Thin或None
然后将该对话框模板复制三份,我们就有了三份属性页模板,如下图:
3. 然后在资源视图的字符串表中添加三个资源字符串作为属性页的标题,如下图:
4. 好了,现在前期准备工作都做充分了,开始进行编码了,其实编码就十来行简单的代码:
![](https://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif)
代码
代码// 在对话框类(假设类名为CMyDialog)中添加属性表和属性页的成员变量
// mydialog.h#include <list>
class CMyDialog : public CDialog
{
public:
// ... 省略private:
std::list<CPropertyPage*> m_pPageList;
CPropertySheet m_propSheet;
// ... 余下的也省略
};
// mydialog.cpp
CMyDialog::CMyDialog(CWnd* pParent /* = NULL */) : CDialog(CMyDialog::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
// 初始化属性页和属性表
m_pPageList.push_back(new CPropertyPage(IDD_PAGE1, IDS_PAGE1));
m_pPageList.push_back(new CPropertyPage(IDD_PAGE2, IDS_PAGE2));
m_pPageList.push_back(new CPropertyPage(IDD_PAGE3, IDS_PAGE3));
std::list<CPropertyPage*>::const_iterator iter = m_pPageList.begin();
for (; iter != m_pPageList.end(); ++iter)
{
m_propSheet.AddPage(*iter);
}
}BOOL CMyDialog::OnInitDialog()
{
// 初始化对话框
CDialog::OnInitDialog();
// ... 省略部分工程创建自动添加的代码
// 创建属性表
m_propSheet.Create(this, WS_CHILD | WS_VISIBLE, WS_EX_CONTROLPARENT);
CRect rcSheet;
GetDlgItem(IDC_SHEET_RECT)->GetWindowRect(rcSheet);
ScreenToClient(rcSheet);
m_propSheet.SetWindowPos(NULL, rcSheet.left, rcSheet.top, 0, 0, SWP_NOSIZE | SWP_NOZORDER | SWP_NOACTIVATE);return TRUE;
}
5. 至此,我们完成了创建一个嵌入式属性表的所有工作,编译和运行试试!