基于对话框的MFC程序并不能直接响应键盘事件,而如果我们想要将某个按钮单击事件与某个键盘按键关联起来,那么重载PreTranslateMessage(MSG* pMsg)这个虚函数是最好的方法。
首先,添加这个虚函数,在CxxxDlg类上单击右键选择Add Virtual Function,从列表中选择PreTranslateMessage(MSG* pMsg)这个函数,添加即可。
函数体可以这么写:
BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
int myID;
CWnd* pWnd=WindowFromPoint(pMsg->pt);
myID=pWnd->GetDlgCtrlID();
if(pMsg->message==WM_LBUTTONUP||pMsg->message==WM_KEYDOWN)
{
bool event1=myID==IDC_N1||pMsg->wParam==49;
if(event1){
//事件处理代码
}
return CDialog::PreTranslateMessage(pMsg);
}
//上述代码即可将ID为IDC_N1的button控件单机事件与键盘上的1键关联起来,共用一个消息响应事件。