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

VC++ 三步打造真彩工具列 (24-bit Toolbar)

     編輯:VC 教學

痛點

MFC 預設工具列僅支援 16 色 (4-bit) 位圖,真彩圖示會嚴重失真。利用 `CToolBar::SetBitmap` 直接載入 24-bit BMP 即可突破限制。

完整代碼


// MainFrm.h
class CMainFrame : public CFrameWnd {
    CBitmap m_bmpToolbar; // 必須為成員變數,生命週期覆蓋工具列
};

// MainFrm.cpp - OnCreate
int CMainFrame::OnCreate(LPCREATESTRUCT lpCS) {
    if (CFrameWnd::OnCreate(lpCS) == -1) return -1;

    // 1. 載入 24-bit BMP (資源 IDB_TOOLBAR_TRUECOLOR)
    m_bmpToolbar.LoadBitmap(IDB_TOOLBAR_TRUECOLOR);

    // 2. 關聯位圖
    m_wndToolBar.SetBitmap(m_bmpToolbar);

    // 3. 設定按鈕 ID 陣列 (對應位圖索引順序)
    UINT ids[] = { ID_FILE_NEW, ID_FILE_OPEN, ID_FILE_SAVE };
    m_wndToolBar.SetButtons(ids, _countof(ids));

    // 4. 設定按鈕/圖示尺寸 (按鈕 25x25, 圖示 15x15)
    m_wndToolBar.SetSizes(CSize(25,25), CSize(15,15));

    return 0;
}

資源製作要點

  1. 使用 Photoshop/VS 資源編輯器建立 **24-bit BMP**,寬度 = 按鈕數 × 圖示寬 (如 3×16=48px),高度 = 圖示高 (16px)。
  2. 每個圖示區域按順序排列,透明色建議用品紅 (RGB 255,0,255) 或 Alpha 通道。
  3. 匯入資源時選 **Bitmap**,不要勾選「壓縮」。

進階:支援高 DPI 縮放


// 依系統 DPI 動態調整
int dpi = GetDeviceCaps(::GetDC(NULL), LOGPIXELSX);
float scale = dpi / 96.0f;
m_wndToolBar.SetSizes(CSize(25*scale, 25*scale), CSize(16*scale, 16*scale));

常見錯誤

  • `m_bmpToolbar` 宣告為區域變數 → 函數結束釋放位圖 → 工具列顯示空白。
  • 未呼叫 `SetButtons` → 工具列無按鈕。
  • 位圖寬度非按鈕數整數倍 → 最後一個按鈕顯示不全。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved