- 公开视频 -> 链接点击跳转公开课程
- 博客首页 -> 链接点击跳转博客主页
目录
属性页对话框
概念
流程
示例
属性页对话框
概念
-
属性页对话框由一个主对话框和多个属性页组成。每个属性页是一个单独的对话框模板,它们共享同一个对话框窗口。用户可以通过点击不同的标签来切换不同的属性页。
-
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(); }