1. 程式人生 > >使對話方塊的最大化、最小化和關閉按鈕變灰以及對其過載的方法

使對話方塊的最大化、最小化和關閉按鈕變灰以及對其過載的方法

一.使對話方塊的最大化、最小化和關閉按鈕變灰。

1.在OnInitDialog()函式中新增以下程式碼使關閉按鈕變灰:

CMenu* menu = this->GetSystemMenu(FALSE);

menu->EnableMenuItem(SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);

如果還想遮蔽掉Esc和Art + F4快捷鍵的話,過載On_Cancel()函式,將其中的CDialog::OnCancel();註釋掉即可,如果將On_Ok()函式中的CDialogEx::OnOK();也註釋掉,那隻能通過自己新增其他按鈕和操作或在工作管理員中關閉對話方塊了。

2.通過設定對話方塊屬性中的Maximize Box屬性和Minimize Box屬性為False使最大化和最小化按鈕變灰。

二.過載對話方塊的最大化、最小化和關閉按鈕。

使用WM_SYSCOMMAND訊息和wParam中的SC_CLOSE、SC_MAXIMIZESC_MINIMIZE具體操作如下:

標頭檔案:

protected:

afx_msg void OnSysCommand(UINT nID, LPARAM lParam);

DECLARE_MESSAGE_MAP()

cpp檔案:

BEGIN_MESSAGE_MAP(CMFCTestApplicationDlg, CDialogEx)
    ON_WM_SYSCOMMAND()

END_MESSAGE_MAP()

void CXXDlg::OnSysCommand(UINT nID, LPARAM lParam) { // TODO: 在此新增訊息處理程式程式碼和/或呼叫預設值 switch(nID) { case SC_MINIMIZE:         ...
break;
    case SC_MAXIMIZE:
        ...
        break;
    case SC_CLOSE:
        ...
        break;
} CDialogEx::OnSysCommand(nID, lParam); }

補充:WM_SYSCOMMAND訊息的相關說明參考https://msdn.microsoft.com/en-us/library/ms646360%28v=vs.85%29.aspx