12

Returnコントロールでキー ( VK_RETURN)を処理するにはどうすればよいCEditですか? コントロールのCEdit親はCDialogです。

4

5 に答える 5

16

ダイアログの PreTranslateMessage でキーをフィルタリングすることもできます。の場合はWM_KEYDOWNVK_RETURNに電話してGetFocusください。エディット コントロールにフォーカスがある場合は、エディット コントロールで押されたリターンの処理を呼び出します。

if の句の順序は、効率的であるためにショートサーキットに依存していることに注意してください。

BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_KEYDOWN &&
        pMsg->wParam == VK_RETURN &&
        GetFocus() == m_EditControl)
    {
        // handle return pressed in edit control
        return TRUE; // this doesn't need processing anymore
    }
    return FALSE; // all other cases still need default processing
}
于 2009-02-12T21:08:55.263 に答える
5

正解は、WM_GETDLGCODE / OnGetDlgCodeメッセージを処理することです。そこで、すべてのキーをクラスで処理するように指定できます。

UINT CMyEdit::OnGetDlgCode()
{
    return CEdit::OnGetDlgCode() | DLGC_WANTALLKEYS;
}
于 2011-05-17T09:19:16.133 に答える
3

コントロールのダイアログ リソースで Edit Control スタイル ES_WANTRETURN が設定されていることを確認します。

于 2009-02-12T14:58:07.430 に答える