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

VC 對話框整合屬性頁五種方案比較

     編輯:關於VC++

方案一:單一對話框 + TabCtrl 手動顯隱

  • 對話框放 CTabCtrl 與所有控件,TCN_SELCHANGE 以 ShowWindow 切換。
  • 缺點:設計器操作困難、控件變數眾多、邏輯分散。

方案二:CPropertySheet + CPropertyPage(標準模態)

  • 各頁面為 CPropertyPage 衍生類,CPropertySheet::DoModal 顯示。
  • 優點:封裝良好、資源獨立。缺點:無法在主對話框放置其他控件。
方案二效果

方案三:衍生 CPropertySheet 加入主控件

  • 自訂 CMySheet,OnInitDialog 擴大視窗、以 Create 動態建立按鈕。
  • 缺點:控件位置難控、僅能置於右側/底部。
方案三效果

方案四:主對話框嵌入 CPropertySheet(非模態)

  • 主對話框成員變數 CPropertySheet m_sheet、各頁 CPropertyPage 實例。
  • OnInitDialog 呼叫 m_sheet.Create(this, WS_CHILD|WS_VISIBLE, WS_EX_CONTROLPARENT),再 SetWindowPos 定位。
  • 優點:主對話框自由配置控件、頁面邏輯獨立。缺點:主對話框難接收標籤切換通知。
方案四效果

方案五:自訂 CTabSheet(繼承 CTabCtrl)——推薦

  • 頁面類別繼承 CDialog(非 CPropertyPage),資源設為 Child/No Border。
  • CTabSheet 內部陣列管理頁面指標、資源 ID、標題。
  • AddPage(title, pDialog, IDD) 登記,Show() 建立頁面與標籤,SetRect() 計算頁面區域。
  • OnLButtonDown 處理標籤切換顯隱。
  • 使用極簡:m_sheet.AddPage(_T("tab1"), &m_page1, IDD_DIALOG1); m_sheet.Show();

方案五結合了設計器友善、封裝完整、通知處理方便(可再對映 TCN_SELCHANGE)等優點,最適合實務專案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved