CDialog
ダイアログの×(バツ)ボタンを無効にする
ダイアログの×ボタンを無効にする方法を解説します。
CDialogの派生クラス(関連付けられたダイアログボックスのクラス)にOnInitDialog関数をオーバーライドします。
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キーでダイアログボックスを閉じる処理を無効にします。
すべてのメッセージは、デフォルトのメッセージ処理をする前に、この関数を通ります。
デフォルトの処理をされる前に、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);
}