1

一个很直接的问题......

如何在CEdit控制框中输入新行而不触发 OK 并完全关闭对话框?我的意思是,当您按下回车键时,它会自动选择“确定”,即使您的光标仍在CEdit控件中。我正在尝试做的事情可能吗?还是我必须使用其他控件

PS:顺便说一句,这是一个模态对话框。

4

2 回答 2

2

这个问题有多种解决方案。

基本上你需要的是ES_WANTRETURN编辑控件上的样式。

另一种解决方案是检查消息并输入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;
}

更新:仅供参考,也看看仅仅因为你是一个控件并不意味着你必须在一个对话框中

于 2014-03-24T15:52:22.187 回答
-1

正如您所发现的,默认的对话框处理是在按下回车键时关闭对话框。MFC 实际上执行 OnOK 处理,但您可以覆盖它。 这是和旧的解释,但是,它仍然是相关的。

于 2014-03-24T15:45:55.247 回答