一个非常直接的问题..。
如何在不触发OK并完全关闭对话框的情况下在CEdit控件框中输入新行?我的意思是,当您按enter键时,它会自动选择OK,即使您的光标仍然在CEdit控件中。我正在尝试做的事情是可能的吗?或者我必须使用其他一些控件
顺便说一句,这是一个模式对话框。
发布于 2014-03-24 23:52:22
对于这个问题,有多种解决方案。
基本上,您需要的是编辑控件上的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。
发布于 2014-03-24 23:45:55
正如您已经发现的,默认对话框处理是在按enter时关闭对话框。MFC实际上执行OnOK处理,但您可以重写它。Here's和旧的解释,但是,它仍然是相关的。
https://stackoverflow.com/questions/22613477
复制相似问题