1:最简单的也是不太好的方法,重载PreTranslateMessage函数,屏蔽掉Enter键。
这样做的代价就是正常的按键也不能处理Enter键了
BOOL CFindWordDlg::PreTranslateMessage(MSG *pMsg)
{
if(pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_RETURN://屏蔽回车
// OnKeyDown(VK_SPACE, LOWORD(pMsg ->lParam), HIWORD(pMsg->lParam));
return TRUE;
case VK_ESCAPE://屏蔽Esc
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
2:第二种解决方案
这种是本质上的解决方案。
本质上,由于默认输入Enter键时,系统会调用OnOK()函数,CDialog::OnOK()是一个可以让对话框退出的函数。
所以我们要重写OnOK();
如下
void Ctest_mfcDlg::OnOK()
{
// TODO: 在此添加控件通知处理程序代码
//CDialog::OnOK();
}
由于默认的id号为IDOK的控件是被映射到调用CDialog::OnOK函数,所以,我们要吧id号为IDOK的控件改名字为ID_OK,随便换个名字就行,然后添加消息映射
ON_BN_CLICKED(ID_OK, &Ctest_mfcDlg::OnBnClickedOk);
void Ctest_mfcDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
OnMyOK();
}
void Ctest_mfcDlg::OnMyOK() // :模拟原来的OnOK()
{
// TODO: 在此添加控件通知处理程序代码
CDialog::OnOK();
}
OK,现在应该好了,使用习惯一切正常。