1

とても素朴な疑問……。

CEditOK をトリガーしてダイアログ ボックスを完全に閉じることなく、コントロール ボックスに新しい行を入力するにはどうすればよいでしょうか。つまり、Enter キーを押すと、カーソルがまだCEditコントロール内にある場合でも、自動的に [OK] が選択されます。私がやろうとしていることは可能ですか?または、他のコントロールを使用する必要がありますか

PS: これはモーダル ダイアログ ボックスです。

4

2 に答える 2

2

この問題にはさまざまな解決策があります。

基本的に必要なのは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 もご覧ください

于 2014-03-24T15:52:22.187 に答える