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

VC++ 實現高彩色工具欄:突破 16 色限制的完整技術方案

     編輯:VC 教學

引言:系統級工具欄的視覺優勢

資源管理器、IE 等系統程序工具欄圖標色彩豐富(256 色甚至真彩),而普通 MFC 應用工具欄僅支持 16 色,視覺效果大打折扣。本文通過替換工具欄底層圖像列表,實現應用程序工具欄的高彩色顯示。

核心設計思路

  1. 普通工具欄機制: 資源視圖中 IDR_MAINFRAME Toolbar 資源,按鈕圖標以無縫長條位圖(BMP)存儲,運行時載入 CImageList,工具欄按索引從中取圖。
  2. VC 限制: 資源編輯器強制工具欄位圖不超過 16 色。雖複製貼上可暫時顯示 256 色,但運行時仍退化為 16 色。
  3. 突破口: 工具欄顯示時從圖像列表讀取,而非直接讀 Toolbar 資源。因此可自行準備高彩色 BMP,載入自建 CImageList,再用 SetImageList() 替換工具欄默認圖像列表。

真彩工具欄實現步驟

準備工作

  • 外部繪圖工具製作高彩色工具欄 BMP(僅顏色豐富,尺寸結構與普通工具欄一致)。N 個 M×M 圖標 → 位圖尺寸:長 N*M,寬 M。
  • 將 BMP 作為位圖資源導入專案(資源 ID 如 IDB_TOOLBAR)。注意:真彩位圖導入後無法在資源視圖編輯。
  • 事件響應等邏輯仍通過原 IDR_MAINFRAME Toolbar 資源配置。

關鍵代碼實現(在 CMainFrame::OnCreate() 中)

1. 載入高彩色位圖

HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(IDB_TOOLBAR), IMAGE_BITMAP, 0, 0,
    LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);

LR_CREATEDIBSECTION 創建 DIB 段,保留顏色信息;LR_LOADMAP3DCOLORS 映射 3D 顏色。

2. 關聯 CBitmap 對象

CBitmap bm;
bm.Attach(hbm);

3. 創建高彩色圖像列表

m_ilToolBar.Create(32, 32, ILC_COLOR8, 4, 4); // 256色
m_ilToolBar.Add(&bm, (CBitmap*)NULL);

顏色深度常量(commctrl.h):

常量值含義
ILC_COLOR40x000416 色
ILC_COLOR80x0008256 色
ILC_COLOR160x001016 位色 (High Color)
ILC_COLOR240x001824 位色 (True Color)
ILC_COLOR320x002032 位色 (含 Alpha)

多數程序 256 色(ILC_COLOR8)已足夠。

4. 替換工具欄圖像列表(關鍵步驟)

m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ilToolBar);

將工具欄控件的圖標來源指向包含高彩色位圖的圖像列表 m_ilToolBar。

完整 OnCreate 代碼片段

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;

    // ... 原有工具欄創建代碼 ...

    // 高彩色工具欄實現
    HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
        MAKEINTRESOURCE(IDB_TOOLBAR), IMAGE_BITMAP, 0, 0,
        LR_CREATEDIBSECTION | LR_LOADMAP3DCOLORS);
    if (hbm) {
        CBitmap bm; bm.Attach(hbm);
        m_ilToolBar.Create(32, 32, ILC_COLOR8, 4, 4);
        m_ilToolBar.Add(&bm, (CBitmap*)NULL);
        m_wndToolBar.GetToolBarCtrl().SetImageList(&m_ilToolBar);
    }

    return 0;
}

小結

通過自建高彩色圖像列表替換工具欄默認圖像列表,繞過 VC 資源編輯器 16 色限制,讓普通 MFC 應用擁有媲美系統程序的精美工具欄。關鍵在於 LoadImage 載入 DIB、CImageList::Create 指定色深、SetImageList 替換數據源三步。

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