私はモデルダイアログを持っています。 OnCancel関数をオーバーライドして、ESCボタンを押して予期しない終了を止めました。しかし、これは新しい問題を引き起こしました。閉じる(x)ボタンを使用してアプリケーションを閉じることはできません。関数の実装は次のとおりです。MFC/Visual C++のOnCancelボタンをオーバーライド
void MyDlg::OnCancel()
{
}
私はモデルダイアログを持っています。 OnCancel関数をオーバーライドして、ESCボタンを押して予期しない終了を止めました。しかし、これは新しい問題を引き起こしました。閉じる(x)ボタンを使用してアプリケーションを閉じることはできません。関数の実装は次のとおりです。MFC/Visual C++のOnCancelボタンをオーバーライド
void MyDlg::OnCancel()
{
}
ダイアログを閉じると効果的にキャンセルされます。 OnCancelハンドラでクローズを無効にしているので、何も起こりません。
BOOL CYourDlg::PreTranslateMessage(MSG* pMsg)
{
switch (pMsg->message)
{
case WM_KEYDOWN:
switch(pMsg->wParam)
{
case VK_ESCAPE:
case VK_CANCEL: return true;
}
break;
}
return CDialog::PreTranslateMessage(pMsg);
}
OnCancelは、Xボタンを押すか、エスケープを押すことによって呼び出され、関数内で指示する方法はありません。
だけで、あなたはキーボードメッセージの前処理に必要なESCを無効にします。ユーザーが終了するかどうかを尋ねるメッセージダイアログを追加したり、エスケープキーをトラップして見ることができます。 –またはキャンセルボタン。 –