- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
属性页对话框
概念
属性页对话框由一个主对话框和多个属性页组成。每个属性页是一个单独的对话框模板,它们共享同一个对话框窗口。用户可以通过点击不同的标签来切换不同的属性页。
CPropertyPage
这是每个属性页的基类。它继承自CDialog类,用于管理单个属性页的外观和行为。
主要方法和成员:
OnInitDialog()
:初始化对话框。OnOK()
:当用户点击“确定”时调用,用于保存更改。OnCancel()
:当用户点击“取消”时调用,用于取消更改。
CPropertySheet
这是属性页对话框的主类,它管理所有的属性页。
主要方法和成员:
AddPage(CPropertyPage*)
:添加一个属性页到属性页对话框中。DoModal()
:显示模态属性页对话框。Create()
:显示非模态属性页对话框。
流程
定义属性页类
为每个属性页创建一个类,继承自CPropertyPage。
在资源编辑器中设计对话框模板,并将其与属性页类关联。
定义属性页对话框类
- 创建一个CPropertySheet的派生类,用于管理所有的属性页。
添加属性页到属性页对话框
- 在属性页对话框类的适当位置(如构造函数或初始化函数),使用
AddPage()
方法添加所有属性页。
- 在属性页对话框类的适当位置(如构造函数或初始化函数),使用
显示属性页对话框
- 使用
DoModal()
或Create()
方法显示属性页对话框。
- 使用
示例
属性页 - 资源文件添加3个对话框 并 继承于CMFCPropertyPage
重写函数OnSetActive结合GetParent以及SetWizardButtons设置按钮属性
管理类 - 添加对应类继承于 CPropertySheet
构造函数中通过AddPage将上述对话框进行关联
class CProSheet : public CPropertySheet { public: CProSheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0); CProSheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0); public: CProPage1 m_Page1; CProPage2 m_Page2; CProPage3 m_Page3; }; CProSheet::CProSheet(UINT nIDCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(nIDCaption, pParentWnd, iSelectPage) { AddPage(&m_Page1); AddPage(&m_Page2); AddPage(&m_Page3); } CProSheet::CProSheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage) :CPropertySheet(pszCaption, pParentWnd, iSelectPage) { AddPage(&m_Page1); AddPage(&m_Page2); AddPage(&m_Page3); } void CMainDlg::OnBnClickedButton13() { CProSheet mainSheet(_T("游戏问卷调查")); mainSheet.SetWizardMode(); mainSheet.DoModal(); } BOOL CProPage1::OnSetActive() { // TODO: 在此添加专用代码和/或调用基类 CProSheet* pMainSheet = (CProSheet*)GetParent(); pMainSheet->SetWizardButtons(PSWIZB_NEXT); return CMFCPropertyPage::OnSetActive(); }