// 步驟 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;
}
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);
}
}
| 面向 | MFC | C++ Builder (VCL) |
|---|---|---|
| 介面封裝 | 高階封裝 (CImageList, CTabCtrl) | 薄封裝,直接對應 API 訊息 |
| 程式碼風格 | 物件導向、型別安全 | 訊息導向、參數需手動轉型 |
| 學習曲線 | 需熟悉 MFC 類別階層 | 需熟悉 Windows 通用控制項訊息 |
| 靈活度 | 受限於封裝提供的方法 | 可直接使用所有原生訊息與結構 |
TCITEM (舊版 TC_ITEM):標籤項目結構,mask 指定有效欄位,iImage 為影像清單索引TCM_SETIMAGELIST (0x1303):wParam=未用,lParam=HIMAGELISTTCM_SETITEM (0x1306):wParam=項目索引,lParam=LPTCITEMRGB(255,0,255) 或純白 RGB(255,255,255) 作為透明遮罩CImageList 會自動釋放;BCB TImageList 為元件自動管理SetItem/Perform(TCM_SETITEM)