Astonish Arts  > AADS  > MFC  > CDialog

Astonish Arts Developer Section

MFC

CDialog

ダイアログの×(バツ)ボタンを無効にする

ダイアログの×ボタンを無効にする方法を解説します。
ダイアログの×(バツ)ボタンを無効にする
CDialogの派生クラス(関連付けられたダイアログボックスのクラス)にOnInitDialog関数をオーバーライドします。
OnInitDialog関数内に、以下のコードを追加してシステムメニューを無効にします。
BOOL CDlgBeginApp::OnInitDialog()
{
    CDialog::OnInitDialog();

    // +--- ×ボタンを無効
    CMenu* pMenu	= GetSystemMenu( FALSE );
    pMenu->EnableMenuItem( SC_CLOSE, MF_GRAYED );

    return TRUE;
}
			

ダイアログボックスのENTERキーとESCキーで閉じるのを無効にする

ダイアログボックスのENTERキーとESCキーで閉じてしまうのを無効にする方法を解説します。
CDialogの派生クラス(関連付けられたダイアログボックスのクラス)にPreTranslateMessage関数をオーバーライドします。
すべてのメッセージは、デフォルトのメッセージ処理をする前に、この関数を通ります。
デフォルトの処理をされる前に、ENTER,ESCキーの処理をスキップすることで実現します。
PreTranslateMessage関数内に、以下のコードを追加してENTERキー、ESCキーでダイアログボックスを閉じる処理を無効にします。
BOOL CDlgBeginApp::PreTranslateMessage(MSG* pMsg)
{
    // +--- ENTERを無効
    if ( pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN )
        return 0;

    // +--- ESCを無効
    if ( pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_ESCAPE )
        return 0;

    return CDialogEx::PreTranslateMessage(pMsg);
}
			
コピーライト