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

VC++ 工具欄與狀態欄編程實戰:從基礎到自定義的完整指南

     編輯:關於C++

工具欄基礎:資源創建與基本顯示

步驟:資源視圖插入 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` 管理圖標,支持高彩色、任意尺寸。流程:

  1. `m_ImageList.Create(32,32, ILC_COLOR24|ILC_MASK, 1, 1);`
  2. `Add(AfxGetApp()->LoadIcon(IDI_ICON...))` 添加圖標。
  3. 構建按鈕 ID 數組,分隔符用 `ID_SEPARATOR`。
  4. `m_ToolBar.Create(this); m_ToolBar.SetButtons(array, count);`
  5. `m_ToolBar.GetToolBarCtrl().SetImageList(&m_ImageList);` 關聯圖像列表。
  6. `SetSizes(CSize(50,60), CSize(32,32))` 設置按鈕/圖標大小(按鈕需比圖標寬 7px、高 6px)。
  7. `SetButtonText` 設置按鈕文本。

工具欄與菜單欄綁定

關鍵:工具欄按鈕 `idCommand` 設置為對應菜單項 ID(如 `ID_ATTENDANCE_RECORD`)。MFC 命令路由機制會自動將工具欄按鈕點擊路由到同 ID 的菜單處理函數(`ON_COMMAND`),實現邏輯復用。代碼使用 `TBBUTTON` 結構體數組精細控制每個按鈕屬性(`iBitmap`, `idCommand`, `fsStyle`, `fsState`)。

狀態欄實現:兩種方式

方式一:`CStatusBarCtrl` (底層控制封裝)


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));

方式二:`CStatusBar` (MFC 封裝,支持指示器)


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(...); // 必須調用使狀態欄顯示

關鍵技術點總結

  • `CreateEx` vs `Create`:前者支持擴展樣式(如 `TBSTYLE_FLAT` 扁平化)。
  • `RepositionBars`:框架窗口佈局控制條的核心,必須調用。
  • 圖像列表解耦:按鈕圖標與工具欄分離,支持動態切換、高 DPI。
  • 命令 ID 綁定:工具欄、菜單、快捷鍵共享同一命令處理入口,體現 MFC 文檔/視圖架構精髓。
  • 狀態欄樣式:`SBPS_STRETCH` 自適應寬度,`SBPS_POPOUT` 凸出效果,`SBPS_NOBORDERS` 無邊框。

資源獲取

文中提供下載鏈接:Demo 工程、VB6 Graphics 圖標庫(經典 32x32 圖標資源)。

總結

本文通過四個遞進案例,系統講解了 VC++/MFC 中工具欄、狀態欄的創建、自定義、圖標管理、菜單綁定、佈局控制全流程,代碼可直接用於生產項目,是 Windows 桌面開發必備參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved