前置條件
- Visual Studio 2008 安裝 Service Pack 1 (SP1);
- 安裝 Visual C++ 2008 Feature Pack (內含 MFC 更新,源自 BCGSoft);
- 重啟 IDE,新建 MFC 專案時會出現新選項。
新建專案步驟
- File → New → Project → MFC Application;
- 專案向導中:「Application Type」選擇 Visual Studio 2008 / Office 2007 (Blue/Silver/Black);
- 「Menu and Toolbar」頁面勾選 Use menu icons 並指定圖標資源 ID;
- 完成向導,生成的框架代碼已自動包含
CMFCMenuBar、CMFCToolBar 並加載圖標。
現有專案遷移
- 將
CFrameWnd 繼承改為 CMDIFrameWndEx / CFrameWndEx;
- 在
OnCreate 中初始化菜單欄:
if (!m_wndMenuBar.Create(this)) return -1;
m_wndMenuBar.SetPaneStyle(m_wndMenuBar.GetPaneStyle() | CBRS_SIZE_DYNAMIC);
CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES); // 圖標資源 ID
m_wndMenuBar.LoadToolBar(IDR_MAINFRAME, 0, 0, TRUE); // TRUE 表示鎖定
- 資源視圖中為菜單項設置圖標:右鍵菜單項 → Properties → Image ID 選擇工具欄圖標索引。
替代方案:BCGControlBar Professional
- MFC Feature Pack 即源自 BCGSoft,購買 BCGControlBar 可獲得更豐富控件 (Ribbon、Property Grid、Gantt、Chart 等) 及技術支持;
- 官網:bcgsoft.com。
常見問題
- 圖標不顯示:確認
IDR_MENU_IMAGES 位圖資源寬度為 16px、高度為 16px * N,色深 24/32 位;
- 菜單項禁用時圖標不變灰:需提供單獨的禁用狀態圖標或啟用
CMFCToolBar::GetDisabledImage() 自動生成;
- 高 DPI 模糊:在 Manifest 中聲明
dpiAware,並提供 32x32 圖標資源。
總結
VS2008 + SP1 + Feature Pack 是零成本為 MFC 添加 Office 風格菜單圖標的標準路徑。現有專案遷移需調整基類與初始化代碼,資源圖標規格需符合 16px 規範。