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

實現 24 位色工具列:CImageList 雙影像清單技術完整範例

     編輯:關於VC++

IE 風格的彩色工具列需要分離「一般狀態」與「滑鼠熱追蹤狀態」兩組圖片。本文示範使用 CImageList 建立雙影像清單,透過 TB_SETIMAGELIST 與 TB_SETHOTIMAGELIST 訊息實現 24 位色工具列。

實作三步驟

1. 宣告工具列成員

// MainFrm.h
CToolBar m_hotToolBar;

2. OnCreate 建立工具列與雙影像清單

// 建立工具列(扁平風格 + 列表模式)
if (!m_hotToolBar.CreateEx(this, TBSTYLE_FLAT | TBSTYLE_LIST,
    WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_hotToolBar.LoadToolBar(IDR_HOTBAR)) {
    TRACE0("Failed to create toolbar\n");
    return -1;
}

// 一般狀態影像清單 (IDB_TOOLBAR_COLD)
CImageList imageList; CBitmap bitmap;
bitmap.LoadBitmap(IDB_TOOLBAR_COLD);
imageList.Create(21, 20, ILC_COLORDDB | ILC_MASK, 13, 1);
imageList.Add(&bitmap, RGB(255,0,255));  // 品紅色作為透明色
m_hotToolBar.SendMessage(TB_SETIMAGELIST, 0, (LPARAM)imageList.m_hImageList);
imageList.Detach(); bitmap.Detach();

// 熱追蹤狀態影像清單 (IDB_TOOLBAR_HOT)
bitmap.LoadBitmap(IDB_TOOLBAR_HOT);
imageList.Create(21, 20, ILC_COLORDDB | ILC_MASK, 13, 1);
imageList.Add(&bitmap, RGB(255,0,255));
m_hotToolBar.SendMessage(TB_SETHOTIMAGELIST, 0, (LPARAM)imageList.m_hImageList);
imageList.Detach(); bitmap.Detach();

3. 加入按鈕命令處理

// MainFrm.h
afx_msg void OnBack();    afx_msg void OnForward();
afx_msg void OnStop();    afx_msg void OnRefresh();
afx_msg void OnHome();

// MainFrm.cpp 訊息對應
ON_COMMAND(ID_BACK, OnBack)
ON_COMMAND(ID_FORWARD, OnForward)
ON_COMMAND(ID_STOP, OnStop)
ON_COMMAND(ID_REFRESH, OnRefresh)
ON_COMMAND(ID_HOME, OnHome)

// 空實作(實際專案填入導航邏輯)
void CMainFrame::OnBack() {}  // 等五個函數

關鍵技術解析

技術點說明
TBSTYLE_FLAT | TBSTYLE_LIST扁平風格 + 圖示與文字並列(IE 風格)
ILC_COLORDDB | ILC_MASK裝置相依色彩 + 遮罩(支援透明色)
RGB(255,0,255)品紅色作為透明色慣例(不常用於圖片內容)
TB_SETIMAGELIST設定一般狀態影像清單
TB_SETHOTIMAGELIST設定熱追蹤狀態影像清單(滑鼠懸停時切換)
Detach()釋放 MFC 物件對底層 GDI 物件的擁有權,避免重複釋放

資源準備需求

  • 工具列資源 IDR_HOTBAR:定義 5 個按鈕 (Back, Forward, Stop, Refresh, Home)
  • 位圖資源 IDB_TOOLBAR_COLD:一般狀態 5 張 21×20 圖示水平拼接
  • 位圖資源 IDB_TOOLBAR_HOT:熱追蹤狀態 5 張同尺寸圖示(通常亮度較高/色調不同)

總結

雙 CImageList + TB_SETIMAGELIST/TB_SETHOTIMAGELIST 是實現 24 位色熱追蹤工具列的標準 MFC 做法。程式碼簡潔、無第三方相依、完整相容標準工具列架構。適合需求 IE 風格彩色工具列的專案直接採用。

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