首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

MFC 屬性表/屬性頁:CPropertySheet 與 CPropertyPage 完整實作指南

     編輯:關於C語言

屬性表(Property Sheet)提供分頁式對話框,適合分類設定介面。核心類別:`CPropertyPage`(單一頁面)與 `CPropertySheet`(容器)。本文涵蓋資源建立、類別產生、模態/非模態建立、動態頁面增減與常見陷阱。

建立步驟

  1. 資源編輯器:插入「Property Page」資源,或插入 Dialog 並設 Style=Child、Border=Thin
  2. ClassWizard:對每個頁面資源建立類別,基類選 `CPropertyPage`
  3. Sheet 類別:建立 `CPropertySheet` 衍生類,將頁面物件作為成員變數,建構函數中 `AddPage`

Sheet 類別範例

class CMyPropSheet : public CPropertySheet {
    CPage1 m_page1;
    CPage2 m_page2;
public:
    CMyPropSheet() : CPropertySheet(_T("設定"), NULL, 0) {
        m_page1.Construct(IDD_PAGE_1);
        m_page2.Construct(IDD_PAGE_2);
        AddPage(&m_page1);
        AddPage(&m_page2);
    }
};

模態 vs 非模態

動態增減頁面

  • `AddPage(CPropertyPage*)`:新增頁面
  • `RemovePage(int nPageIndex)` 或 `RemovePage(CPropertyPage*)`:移除頁面
  • `SetActivePage(int nPageIndex)`:程式切換頁面
  • `GetPageCount()` / `GetPage(index)`:枚舉頁面

常見問題與技巧

  • 頁面資源必須設 **Style=Child, Border=Thin**,否則顯示異常
  • 非模態 Sheet 需在父視窗銷毀前手動銷毀,避免記憶體洩漏
  • 頁面間共享資料:放在 Sheet 類別成員變數,頁面透過 `GetParent()->m_xxx` 存取
  • 嚮導模式:`SetWizardMode()` 後頁面底部顯示「上一步/下一步/完成」按鈕
  • 套用按鈕:覆寫 `OnApply()` 處理「套用」邏輯,`OnOK()` 預設呼叫 `OnApply()` 再關閉
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型建立方式生命週期適用場景
模態`sheet.DoModal()`函數返回時銷毀設定對話框、精靈
非模態`sheet.Create()`手動 `DestroyWindow()`工具面板、長期顯示