MFC 默認工具欄 (CToolBar) 背景為系統灰色 (3D Face),圖標周圍有明顯矩形背景塊。需求:像金山衛士等安全軟件那樣,**工具欄背景透明/貼合主窗口背景,圖標無矩形塊**。
TBSTYLE_FLAT | TBSTYLE_TRANSPARENT | TBSTYLE_LIST 風格 (需 CommCtrl 4.71+)。CToolBar::OnPaint 或處理 NM_CUSTOMDRAW 通知 (OnCustomDraw)。DoPaint / DrawButton),按鈕背景模式設為透明。參考實現:CSDN 經典文章 (關鍵點:SetBkMode(hdc, TRANSPARENT)、ParentWnd->OnEraseBkgnd 等)。
CMFCToolBar (MFC Feature Pack / VS2008+)
// 主框架 OnCreate 中
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) {
return -1;
}
// 關鍵:設置透明背景模式
m_wndToolBar.SetTransparentMode(TRUE); // 或 m_wndToolBar.SetBackgroundColor(COLORREF(-1));
// 設置圖標列表 (支持 32位帶 Alpha 通道圖標)
CMFCToolBarImages images;
images.Load(IDB_TOOLBAR_ICONS_32BIT); // 32位 BMP 或 PNG
m_wndToolBar.GetToolBarCtrl().SetImageList(images);
優點: 現代 MFC 封裝良好,支持 Office 2007/2010/2013 風格、高 DPI、Alpha 通道圖標、動態佈局,幾行代碼實現透明背景。
| 技術點 | 說明 |
|---|---|
TBSTYLE_TRANSPARENT | 工具欄控件風格標誌,告知系統背景透明 (需配合自繪) |
NM_CUSTOMDRAW / OnCustomDraw | 自定義繪製入口,可在預繪製階段設置背景模式透明 |
| 32位圖標 (帶 Alpha) | 圖標本身透明,無白邊/灰底,配合透明工具欄完美融合 |
CMFCToolBar::SetTransparentMode | Feature Pack 封裝好的一鍵透明 API |
CMFCToolBar + SetTransparentMode(TRUE) + 32位圖標**,最省力、最現代、維護成本最低。CToolBar 自繪透明背景。MFC 工具欄背景透明化,**現代項目首選 CMFCToolBar 內置透明模式**,老項目靠自繪 (NM_CUSTOMDRAW + 設置背景模式透明 + 父窗口背景填充) 實現。關鍵在於**工具欄背景不自己畫色塊,而是透傳或繪製父窗口背景**,並使用**帶 Alpha 通道的 32位圖標**。