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

MFC 禁用對話方塊關閉按鈕與浮動工具列系統選單技巧

     編輯:關於C語言

三個常見 UI 控制需求的 MFC 實作方案。

1. 禁用對話方塊關閉按鈕 (兩種等效方法)

於 OnInitDialog 或建構函式中執行:

// 方法一:ModifyMenu
CMenu* pSysMenu = GetSystemMenu(FALSE);
pSysMenu->ModifyMenu(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);

// 方法二:EnableMenuItem (推薦,語意更清晰)
CMenu* pSysMenu = GetSystemMenu(FALSE);
pSysMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);

MF_GRAYED 使選單項變灰不可用;若需完全隱藏可用 MF_REMOVE。

2. 禁用浮動工具列的系統選單

建立 CToolBar 衍生類 (如 CMyToolBar),重寫滑鼠按下/雙擊訊息:

void CMyToolBar::OnLButtonDown(UINT nFlags, CPoint point) {
    if (IsFloating()) {
        CWnd* pDockBar = GetParent();
        CWnd* pMiniFrame = pDockBar->GetParent(); // CMiniFrameWnd
        pMiniFrame->ModifyStyle(WS_SYSMENU, 0);   // 移除系統選單
        pMiniFrame->ShowWindow(SW_HIDE);          // 重繪生效
        pMiniFrame->ShowWindow(SW_SHOW);
    }
    CToolBar::OnLButtonDown(nFlags, point);
}

void CMyToolBar::OnLButtonDblClk(UINT nFlags, CPoint point) {
    if (IsFloating()) {
        CWnd* pDockBar = GetParent();
        CWnd* pMiniFrame = pDockBar->GetParent();
        pMiniFrame->ModifyStyle(WS_SYSMENU, 0);
        pMiniFrame->ShowWindow(SW_HIDE);
        pMiniFrame->ShowWindow(SW_SHOW);
    }
    CToolBar::OnLButtonDblClk(nFlags, point);
}

3. 禁用視窗最大化按鈕

重寫 PreCreateWindow 移除 WS_MAXIMIZEBOX 風格:

BOOL CMyFrameWnd::PreCreateWindow(CREATESTRUCT& cs) {
    cs.style &= ~WS_MAXIMIZEBOX;
    return CFrameWnd::PreCreateWindow(cs);
}

適用版本

Visual C++ 6.0 / Visual Studio 2005+ / MFC 所有版本通用。

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