一个很直接的问题......
如何在CEdit
控制框中输入新行而不触发 OK 并完全关闭对话框?我的意思是,当您按下回车键时,它会自动选择“确定”,即使您的光标仍在CEdit
控件中。我正在尝试做的事情可能吗?还是我必须使用其他控件
PS:顺便说一句,这是一个模态对话框。
一个很直接的问题......
如何在CEdit
控制框中输入新行而不触发 OK 并完全关闭对话框?我的意思是,当您按下回车键时,它会自动选择“确定”,即使您的光标仍在CEdit
控件中。我正在尝试做的事情可能吗?还是我必须使用其他控件
PS:顺便说一句,这是一个模态对话框。
这个问题有多种解决方案。
基本上你需要的是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;
}
更新:仅供参考,也看看仅仅因为你是一个控件并不意味着你必须在一个对话框中。
正如您所发现的,默认的对话框处理是在按下回车键时关闭对话框。MFC 实际上执行 OnOK 处理,但您可以覆盖它。 这是和旧的解释,但是,它仍然是相关的。