Windows图形界面(GUI)-MFC-C/C++ - 属性页对话框

发布于:2024-08-08 ⋅ 阅读:(31) ⋅ 点赞:(0)

目录

属性页对话框

概念

流程

示例


属性页对话框

概念
  • 属性页对话框由一个主对话框和多个属性页组成。每个属性页是一个单独的对话框模板,它们共享同一个对话框窗口。用户可以通过点击不同的标签来切换不同的属性页。

  • 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();
    }