在程序运行时,在界面点击回车,会有默认的按钮响应。但是当界面有多个按钮,处理不同的事务时,点击回车,需要根据当前鼠标所在控件响应不同的按钮处理,要满足这样的需求就需要消息截取,针对不同的控件调用不同的处理函数。
一般,我们采用重载虚函数PreTranslateMessage来打到截取消息的目的。
如果是回车,判断VK_RETURN虚拟按键。
// 取得当前焦点所在控件
CWnd* pWnd = GetFocus();
// 取得控件ID,可以根据ID进行判断
int dID = pWnd->GetDlgCtrlID();
// 取得控件名称,根据控件名称进行判断
GetClassName(pWnd->GetSafeHwnd(), szClassName, 40);
比较函数:lstrcmpi
if ( lstrcmpi(_T("EDIT"), szClassName) == 0 )
{
.......;
}
代码如下:
BOOL CAboutDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if ( pMsg->message == WM_KEYDOWN )
{
if ( pMsg->wParam == VK_RETURN)
{
if ( pMsg->wParam == VK_RETURN )
{
TCHAR szClassName[40] = { 0 };
CWnd* pWnd = GetFocus(); // 取得当前焦点所在控件
if ( pWnd )
{
int dID = pWnd->GetDlgCtrlID(); // 取得控件ID,可以根据ID进行判断
if (dID == IDC_EDIT1)
{
OnBnClickedButton1();
}
else if (dID == IDC_EDIT2)
{
OnBnClickedButton2();
}
// 取得控件名称,根据控件名称进行判断
GetClassName(pWnd->GetSafeHwnd(), szClassName, 40);
if ( lstrcmpi(_T("EDIT"), szClassName) == 0 )
{
return FALSE;
}
}
}
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}