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

MFC 與 C++ Builder 實現屬性表標籤圖示:CImageList vs Windows API 訊息對比

     編輯:關於C++

MFC 實作:四步驟完成標籤圖示

// 步驟 1:建立位圖資源 (IDB_TABIMAGES),圖片尺寸配合標籤高度
// 步驟 2:宣告成員變數
protected:
    CImageList m_imagetab;

// 步驟 3:覆寫 OnInitDialog
BOOL CMyPropSheet::OnInitDialog() {
    BOOL bResult = CPropertySheet::OnInitDialog();
    
    // 建立影像清單:資源ID、單張寬度、成長數、透明色
    m_imagetab.Create(IDB_TABIMAGES, 13, 1, RGB(255,255,255));
    
    // 取得標籤控制項並設定影像清單
    CTabCtrl* pTab = GetTabControl();
    pTab->SetImageList(&m_imagetab);
    
    // 逐項設定圖示索引
    TCITEM tcitem;
    tcitem.mask = TCIF_IMAGE;
    for (int i = 0; i < 3; i++) {
        tcitem.iImage = i;
        pTab->SetItem(i, &tcitem);
    }
    return bResult;
}

C++ Builder 實作:直接發送 Windows 訊息

BCB 無 SetImageList/SetItem 封裝,需直接操作 TCM_SETIMAGELIST、TCM_SETITEM:

void __fastcall TForm1::FormPaint(TObject *Sender) {
    // 設定影像清單
    TabControl1->Perform(TCM_SETIMAGELIST, 0, (LPARAM)ImageList1->Handle);
    
    TCITEM tcitem;
    tcitem.mask = TCIF_IMAGE;
    for (int i = 0; i < 3; i++) {
        tcitem.iImage = i;
        TabControl1->Perform(TCM_SETITEM, i, (LPARAM)(LPTCITEM)&tcitem);
    }
}

兩種風格對比

面向MFCC++ Builder (VCL)
介面封裝高階封裝 (CImageList, CTabCtrl)薄封裝,直接對應 API 訊息
程式碼風格物件導向、型別安全訊息導向、參數需手動轉型
學習曲線需熟悉 MFC 類別階層需熟悉 Windows 通用控制項訊息
靈活度受限於封裝提供的方法可直接使用所有原生訊息與結構

關鍵結構與訊息

  • TCITEM (舊版 TC_ITEM):標籤項目結構,mask 指定有效欄位,iImage 為影像清單索引
  • TCM_SETIMAGELIST (0x1303):wParam=未用,lParam=HIMAGELIST
  • TCM_SETITEM (0x1306):wParam=項目索引,lParam=LPTCITEM

最佳實務建議

  • 圖片尺寸:建議 16x16 或配合系統 DPI 縮放
  • 透明色:使用魔術粉紅 RGB(255,0,255) 或純白 RGB(255,255,255) 作為透明遮罩
  • 資源管理:MFC CImageList 會自動釋放;BCB TImageList 為元件自動管理
  • 動態更新:執行期增減標籤時,同步呼叫 SetItem/Perform(TCM_SETITEM)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved