とても素朴な疑問……。
CEdit
OK をトリガーしてダイアログ ボックスを完全に閉じることなく、コントロール ボックスに新しい行を入力するにはどうすればよいでしょうか。つまり、Enter キーを押すと、カーソルがまだCEdit
コントロール内にある場合でも、自動的に [OK] が選択されます。私がやろうとしていることは可能ですか?または、他のコントロールを使用する必要がありますか
PS: これはモーダル ダイアログ ボックスです。
とても素朴な疑問……。
CEdit
OK をトリガーしてダイアログ ボックスを完全に閉じることなく、コントロール ボックスに新しい行を入力するにはどうすればよいでしょうか。つまり、Enter キーを押すと、カーソルがまだCEdit
コントロール内にある場合でも、自動的に [OK] が選択されます。私がやろうとしていることは可能ですか?または、他のコントロールを使用する必要がありますか
PS: これはモーダル ダイアログ ボックスです。
この問題にはさまざまな解決策があります。
基本的に必要なのはES_WANTRETURN
、編集コントロールのスタイルです。
もう 1 つの解決策は、メッセージを確認してキーを入力することですPreTranslateMessage
(これは推奨される方法ではないとコメントされているため、可能性について言及しているだけです)。
BOOL CYouDialog::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN &&
GetFocus() == youcontrol)
{
return TRUE;
}
return FALSE;
}
他の解決策は、を処理することWM_GETDLGCODE
です。編集コントロールをサブクラス化し、これを行う必要があります。
UINT CYourEdit::OnGetDlgCode()
{
return CEdit::OnGetDlgCode() | DLGC_WANTALLKEYS;
}
更新: 参考までに、Just because you're a control does not mean that you're inside a dialog box もご覧ください。