步驟:資源視圖插入 Toolbar 資源(IDR_TOOLBAR1),編輯按鈕圖標。對話框類添加 `CToolBar m_ToolBar`。`OnInitDialog` 中:
m_ToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD|WS_VISIBLE|CBRS_ALIGN_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS, CRect(4,4,0,0));
m_ToolBar.LoadToolBar(IDR_TOOLBAR1);
m_ToolBar.ShowWindow(SW_SHOW);
RepositionBars(AFX_IDW_CONTROLBAR_FIRST, AFX_IDW_CONTROLBAR_LAST, 0);
`RepositionBars` 關鍵:重新佈局控制條,使工具欄正確停靠。
用 `CImageList` 管理圖標,支持高彩色、任意尺寸。流程:
關鍵:工具欄按鈕 `idCommand` 設置為對應菜單項 ID(如 `ID_ATTENDANCE_RECORD`)。MFC 命令路由機制會自動將工具欄按鈕點擊路由到同 ID 的菜單處理函數(`ON_COMMAND`),實現邏輯復用。代碼使用 `TBBUTTON` 結構體數組精細控制每個按鈕屬性(`iBitmap`, `idCommand`, `fsStyle`, `fsState`)。
m_StatusBar.Create(WS_CHILD|WS_VISIBLE|SBT_OWNERDRAW, CRect(0,0,0,0), this, 0);
int parts[3] = {100, 200, -1}; // -1 表佔滿剩餘
m_StatusBar.SetParts(3, parts);
m_StatusBar.SetText(_T("分欄一"), 0, 0);
m_StatusBar.SetIcon(1, m_StatusBar.SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME), FALSE));
static UINT indicators[] = {ID_SEPARATOR, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL};
m_wndStatusBar.Create(this);
m_wndStatusBar.SetIndicators(indicators, 4);
m_wndStatusBar.SetPaneInfo(0, nID, SBPS_STRETCH|SBPS_NOBORDERS, 100);
m_wndStatusBar.SetPaneText(0, _T("就緒"));
// ... 設置其他分欄樣式:SBPS_NORMAL, SBPS_POPOUT, SBPS_DISABLED
RepositionBars(...); // 必須調用使狀態欄顯示
文中提供下載鏈接:Demo 工程、VB6 Graphics 圖標庫(經典 32x32 圖標資源)。
本文通過四個遞進案例,系統講解了 VC++/MFC 中工具欄、狀態欄的創建、自定義、圖標管理、菜單綁定、佈局控制全流程,代碼可直接用於生產項目,是 Windows 桌面開發必備參考。