PreTranslateMessage是CWindow的一个成员函数,你可以重载(override)它,从而获得预先获得消息的能力.
VC6中:
按Ctrl+W打开ClassWizard,在左侧列表选择当前对话框类,在右侧列表中选择PreTranslateMessage,点击右边的“Add Function...”按钮,接着点击右边的“Edit Code”按钮.
但是VC2008和VC6在MFC向导界面方面的确有所不同,在VC2008中,你要重载一个父类的函数,可以在类窗口中找到这个类,然后在属性窗口中添加重写函数.即如下过程(以VS2008为例):
1.打开类视图:
2.单击需要使用PreTranslateMessage的类:
3.在那里你可以找到你要添加PreTranslateMessage函数的类,在属性窗口中,就可以看到这个类的相关属性
4.在属性窗口中点击第六个(倒数第二个)按钮(重写):
你就可以看到所有可以重写override的函数
5.然后里面就有PreTranslateMessage,然后你就可以在那里添加了:
Edit写入如下代码:
BOOL CForm::PreTranslateMessage(MSG* pMsg)
{
{
//屏蔽 回车和ESC键
//屏蔽ESC键退出
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == 0x1b)
return TRUE;
//回车
if (pMsg->message == WM_KEYDOWN && pMsg->wParam == 0x0d )
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}
或
BOOL CPictureDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
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);
}