重载PreTranslateMessage()函数,在这个函数里捕捉ESC键和ENTER键按下时的消息,然后什么都不做,或是添加代码完成自己想要实现的功能。
1. 完全屏蔽ESC退出键与ENTER回车键
BOOL MFCTest1Dlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN)
return TRUE;
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE)
return TRUE;
return CDialog::PreTranslateMessage(pMsg);
}
2. 屏蔽ESC退出键,捕捉ENTER回车键
// 对PreTranslateMessage函数的重载
BOOL MFCTest1Dlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN )
{
//按下回车,如果当前焦点是在自己期望的控件上
if(GetFocus()->GetDlgCtrlID()==IDC_MSG_SEND)
{
MFCTest1Dlg::OnBnClickedButtonInsert();//添加自己的处理代码
}
return TRUE;
}
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE) {
return TRUE;
}
return MFCTest1Dlg::PreTranslateMessage(pMsg);
}
该代码在VC中的MFC程序测试通过,完全可以实现,红色的代码是可以根据自己的实际情况修改的。
3. 屏蔽ESC键,屏蔽ENTER键退出对话框、同时捕捉编辑框ENTER键
class MFCTest1Dlg::public CDialogEx
{
protected:
// 对OnOK()函数的重载,清空确认事件处理,屏蔽回车键退出对话框
virtual void OnOK() {}
// 对OnCanel()函数的重载,清空取消事件处理,设置后不能点X图标关闭对话框
//virtual void OnCancel() {}
};
// 对PreTranslateMessage函数的重载
BOOL MFCTest1Dlg::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_RETURN )
{
//按下回车,如果当前焦点是在自己期望的控件上
if(GetFocus()->GetDlgCtrlID()==IDC_MSG_SEND)
{
MFCTest1Dlg::OnBnClickedButtonInsert();//添加自己的处理代码
}
return TRUE;
}
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==VK_ESCAPE) {
return TRUE;
}
return MFCTest1Dlg::PreTranslateMessage(pMsg);
}
esc键和enter键在一般人的使用中会认为是取消或者确认当前输入的意思,并且认为焦点会后移(tab键),但是windows的mfc对应的是dialog的onok和oncancel函数会关闭当前窗体,所以一般就是取消作用。一切以鼠标为主,键盘只是输入的数据和字符。