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;
}
// 依系統 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));