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

MFC 對話方塊與工具列:禁用關閉鈕、系統選單與最大化鈕的完整技巧

     編輯:VC++

概述

在 MFC 應用程式中,有時需限制使用者關閉視窗或調整視窗大小。本文彙整三項實用技巧:禁用對話方塊關閉鈕、禁用浮動工具列的系統選單、禁用最大化鈕,附完整程式碼片段。

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

在對話方塊類別的 OnInitDialog 或建構函式中加入:

方法一:ModifyMenu

CMenu* pMenu = this->GetSystemMenu(FALSE);
pMenu->ModifyMenu(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);

方法二:EnableMenuItem

CMenu* pMenu = this->GetSystemMenu(FALSE);
pMenu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND | MF_GRAYED);

兩者效果相同,將關閉鈕設為灰色不可用。

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

建立 CToolBar 衍生類別 CxxToolBar,在滑鼠雙擊 (OnLButtonDblClk) 與單擊 (OnLButtonDown) 處理函式中加入:

if (IsFloating()) // 工具列處於浮動狀態
{
    CWnd* pDockBar = GetParent();
    CWnd* pMiniFrame = pDockBar->GetParent();

    // 移除 WS_SYSMENU 風格
    pMiniFrame->ModifyStyle(WS_SYSMENU, NULL);

    // 重繪工具列以生效
    pMiniFrame->ShowWindow(SW_HIDE);
    pMiniFrame->ShowWindow(SW_SHOW);
}

3. 禁用視窗最大化鈕

覆寫 PreCreateWindow,移除 WS_MAXIMIZEBOX 風格:

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

小結

上述技巧皆透過修改視窗風格或選單狀態實現,無需複雜攔截訊息,適合快速套用於既有專案。

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