=============================================================
标题:MFC对话框程序屏蔽回车与ESC键
摘要:
备注:Windows XP + VC2005
日期:2010.8.3
姓名:朱铭雷
=============================================================
MFC下基于对话框的程序,默认的会有一个“确定”按钮,还有一个“取消”按钮,那个“确定”按钮是默认按钮。这时候运行程序,按下回车键或者ESC键,程序都会退出。
取消掉“确定”按钮的Default Button属性,按回车键程序依然会退出,即使把“确定”按钮删除掉,效果也是一样。看了下《Inside Visual C++》。引用一下书中的原话:“当用户按下Enter键时,Windows就会自动去查找“输入焦点”落在了哪一个按钮上,获得焦点的按钮的四周将被点线矩形框所包围。如果所有按钮都没有获得输入焦点,Windows就会自动去寻找程序或资源所指定的默认按钮。如果对话框没有默认按钮,那么即使对话框中没有“确定”按钮,OnOK函数也会自动被调用”
有的时候肯定是不想在按下回车键之后退出对话框程序,ESC也是一样。解决方法也很简单,重载对话框的PreTranslateMessage函数,然后在该函数中干掉ESC和回车这两个按键的消息。
如:
BOOL CDialog1::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
if (pMsg->message == WM_KEYDOWN)
{
switch (pMsg->wParam)
{
case VK_RETURN:
//MessageBox(_T("回车键按下"));
return TRUE;
case VK_ESCAPE:
//MessageBox(_T("ESC键按下"));
return TRUE;
default:
break;
}
}
return CDialog::PreTranslateMessage(pMsg);
}