一个非常直截了当的问题......
如何在CEdit控件框中输入新行而不触发OK并完全关闭对话框?我的意思是当你按下回车键时它会自动选择OK,即使你的光标仍然在CEdit控件中。我正在尝试做什么?或者我必须使用其他控件
PS:这是一个模态对话框btw。
答案 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以及旧的解释,但是,它仍然相关。