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

MFC 工具列與狀態列進階:CToolBar、CStatusBar 與控制列架構

     編輯:關於C語言

通用控制項基礎

工具列、狀態列、工具提示屬於 Windows 通用控制項(ComCtl32.dll),視窗類別名分別為 ToolbarWindow32、msctls_statusbar32、tooltips_class32。使用前必須呼叫 InitCommonControls(或 InitCommonControlsEx 指定 ICC_BAR_CLASSES),MFC 在 AfxDeferRegisterClass 中自動處理。

MFC 雙層封裝架構

  • 底層包裝: CToolBarCtrl、CStatusBarCtrl、CToolTipCtrl 直接對應通用控制項 API,功能完整但操作繁瑣。
  • 高層整合: CToolBar、CStatusBar 繼承 CControlBar,整合框架視窗停駐/浮動、自動調整大小、命令路由、提示文字等高階功能,開發首選。

CControlBar 核心功能

  • 停駐對齊:CBRS_TOP/BOTTOM/LEFT/RIGHT、CBRS_FLOAT_MULTI 多排浮動。
  • 項目管理:支援 HWND 子視窗(如下拉框)與非 HWND 項目(按鈕、分隔器)混合。
  • 樣式旗標:CBRS_GRIPPER 拖曳把手、CBRS_TOOLTIPS 內建提示、CBRS_FLYBY 滑過顯示狀態列文字、CBRS_SIZE_DYNAMIC 動態調整。

工具列關鍵實作細節

  • 按鈕非子視窗,以索引(0 起)管理,屬性含字串/點陣圖索引、樣式(TBSTYLE_BUTTON/CHECK/SEP/DROPDOWN)、狀態(按下/啟用/隱藏)、命令 ID。
  • 字串與點陣圖分別維護兩個內部清單,索引對應按鈕屬性。
  • 自動調整大小:收到 WM_SIZE 或 TB_AUTOSIZE 重新計算佈局。
  • 命令路由:按鈕點擊產生 WM_COMMAND 送父視窗(框架),經標準命令路由分派。
  • 工具提示:TBSTYLE_TOOLTIPS 建立 CToolTipCtrl,透過 TTM_RELAYEVENT 轉發滑鼠事件。

狀態列分區與進階用法

  • 分區(Pane)由索引 0 起編號,類似工具列按鈕管理。
  • SetPaneInfo 設定 ID、寬度、樣式(SBPS_STRETCH 自動拉伸最後一格、SBPS_POPOUT 凹入效果)。
  • SetPaneText/GetPaneText 操作文字,DrawItem 可自繪進度條、動畫等複雜內容。

控制列 ID 範圍規範

MFC 建議控制列子視窗 ID 介於 AFX_IDW_TOOLBARFIRST (0xE800) 至 AFX_IDW_CONTROLBAR_LAST (0xE8FF),前 32 個保留給列印預覽使用,避免衝突。

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