Enterキーまたはキーが押されたときに MFC ダイアログが閉じないようにする 1 つの方法を知っていEscますが、プロセスの詳細と、それを行うための一般的な代替方法をすべて知りたいです。
助けてくれてありがとう。
ユーザーがダイアログで Enter キーを押すと、次の 2 つのことが起こります。
CDialog::SetDefID()
)。次に、このコントロールの ID を持つ WM_COMMAND がダイアログに送信されます。最初のオプションでは、既定のコントロールの ID が IDOK と等しい場合があります。その後、結果は 2 番目のオプションと同じになります。
デフォルトでは、クラスには仮想関数であるを呼び出すCDialog
ためのハンドラがあり、デフォルトではそれを呼び出してダイアログを閉じます。WM_COMMAND(IDOK)
CDialog::OnOk()
EndDialog(IDOK)
したがって、ダイアログが閉じられないようにする場合は、次のいずれかを実行します。
IDOK
。WM_COMMAND(IDOK)
を呼び出さないにハンドラを設定しますEndDialog()
。CDialog::OnOk()
して呼び出さないでください。IDCANCEL については、似ていますが同等のものはなくSetDefID()
、ESC キーがハードコーディングされています。ダイアログが閉じられないようにするには、次のようにします。
WM_COMMAND(IDCANCEL)
を呼び出さないにハンドラを設定しますEndDialog()
。CDialog::OnCancel()
して呼び出さないでください。OnOk イベントをオーバーライドするだけで、メッセージを親ダイアログに渡す代わりに何もしません。
したがって、基本的には簡単です。
void OnOk() override { /*CDialog::OnOK();*/ }
これにより、return/enter キーを押したときにダイアログが閉じないようにする必要があります。