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

MFC 工具列動態顯示/隱藏與選單同步實作全攻略

     編輯:關於C++

建立工具列資源與成員變數

  1. 資源檔新增工具列 IDR_TOOLBAR 並編輯按鈕。
  2. MainFrame.h 宣告成員:CToolBar m_newToolBar;
  3. OnCreate 中建立並載入:
if (!m_newToolBar.CreateEx(this, TBSTYLE_FLAT, 
    WS_CHILD | WS_VISIBLE | CBRS_RIGHT | CBRS_GRIPPER | 
    CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
    !m_newToolBar.LoadToolBar(IDR_TOOLBAR)) {
    TRACE0("Failed to create toolbar\n");
    return -1;
}
m_newToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_newToolBar);

選單命令切換工具列可見度

透過 ClassWizard 為選單項目 ID_TOOLBAR 新增 OnToolbar 處理函式:

方法一:手動切換

void CMainFrame::OnToolbar() {
    if (m_newToolBar.IsWindowVisible()) {
        m_newToolBar.ShowWindow(SW_HIDE);
    } else {
        m_newToolBar.ShowWindow(SW_SHOW);
    }
    RecalcLayout();           // 重新計算版面,避免殘留佔位空間
    DockControlBar(&m_newToolBar); // 確保拖曳出邊框後仍能正確顯示/隱藏
}

方法二:使用 ShowControlBar 一行搞定

void CMainFrame::OnToolbar() {
    ShowControlBar(&m_newToolBar, !m_newToolBar.IsWindowVisible(), FALSE);
    // 參數:控制列指標、是否顯示、是否延遲重繪
    // 自動保存隱藏前位置,碼更簡潔健壯
}

選單項目核取狀態同步

為選單項目新增 UPDATE_COMMAND_UI 處理函式 OnUpdateToolbar:

void CMainFrame::OnUpdateToolbar(CCmdUI* pCmdUI) {
    pCmdUI->SetCheck(m_newToolBar.IsWindowVisible());
}

此機制會在選單顯示前自動呼叫,確保核取記號與工具列實際狀態一致。

快捷鍵綁定

  1. 開啟 Accelerator 資源編輯器。
  2. 新增項目,ID 設為 ID_TOOLBAR。
  3. 指定快捷鍵(如 Ctrl+T)。

關鍵細節總結

  • RecalcLayout():隱藏/顯示後必須呼叫,否則版面會殘留空白區域。
  • DockControlBar():處理工具列被拖離框架視窗時的狀態還原。
  • ShowControlBar:MFC 封裝良好的高階 API,優先使用可減少錯誤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved