在cedit控件中输入换行符

时间:2014-03-24 15:20:01

标签: visual-c++ mfc cedit

一个非常直截了当的问题......

如何在CEdit控件框中输入新行而不触发OK并完全关闭对话框?我的意思是当你按下回车键时它会自动选择OK,即使你的光标仍然在CEdit控件中。我正在尝试做什么?或者我必须使用其他控件

PS:这是一个模态对话框btw。

2 个答案:

答案 0 :(得分:0)

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

基本上您需要的是编辑控件上的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;
}

更新:仅供参考,还可以查看Just because you're a control doesn't mean that you're necessarily inside a dialog box

答案 1 :(得分:-1)

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