首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

MFC SDI/MDI 隱藏主框架菜單:SetMenu(NULL) 與 m_hMenuDefault 技巧

     編輯:程式設計綜合問答

需求:文檔/視圖架構下隱藏 `CMainFrame` 頂部菜單欄。

SDI (單文檔界面)


// CMainFrame::OnCreate
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1) return -1;
    SetMenu(NULL); // 關鍵:移除菜單
    return 0;
}

MDI (多文檔界面) — VS2008 SP1 前


// CWinApp::InitInstance
BOOL CMyApp::InitInstance() {
    // ... 標準初始化 ...
    pMainFrame->m_hMenuDefault = NULL; // 禁用默認菜單
    // ...
}

// CMainFrame::OnSize (動態隱藏)
void CMainFrame::OnSize(UINT nType, int cx, int cy) {
    CMDIFrameWnd::OnSize(nType, cx, cy);
    if (GetSafeHwnd()) {
        SetMenu(NULL); // 強制移除
    }
}

VS2008 SP1+ / MFC Feature Pack (CMFCMenuBar)

  • 菜單改為 `CMFCMenuBar` 控件佈局,隱藏需:`GetMenuBar()->ShowWindow(SW_HIDE);` 或移除 `EnableDocking` 相關調用。
  • 資源中 `IDR_MAINFRAME` 菜單可刪除或留空。

注意

  • 隱藏菜單後,鍵盤快捷鍵 (`Alt+F` 等) 失效,若需保留快捷鍵,改用 `Accelerator Table` (快捷鍵表) 綁定命令 ID。
  • MDI 子窗口激活時可能自動恢復菜單,需在 `OnMDIActivate` 中再次 `SetMenu(NULL)`。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved