MFC界面拦截键盘消息以消除警告音以及屏蔽MFC界面快捷键命令
·

当焦点在MFC界面的编辑框控件外面的区域时,按键会发出咚咚或者噔噔的声音,因为该按键为无效输入,按键无效输入时MFC出现会默认发出警报声,而且某些快捷键会控制MFC界面的操作。如果MFC程序需要监听键盘消息时,这些问题会影响使用体验。
解决方案:在PreTranslateMessage内拦截按键消息,屏蔽掉无效输入按键消息以及MFC快捷键消息
1.重写PreTranslateMessage

2.拦截键盘消息
//消息处理,消除无效输入的咚咚警报声和屏蔽MFC快捷键命令
BOOL CScreenDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
//使按键无效输入时没有咚咚声。
if (pMsg->message == WM_KEYDOWN )//判断是否是按键消息
{
//获取焦点
CWnd* pCtrl = CWnd::GetFocus();//获取焦点只能在MFC窗口中获取,焦点在MFC窗口外时不能获取,否则返回NULL
if (pCtrl != NULL)
{
//获取焦点所在控件的ID
int iCtrlID = pCtrl->GetDlgCtrlID();
//焦点在编辑框控件时处理按键消息,不在编辑框控件时不处理按键消息
if (iCtrlID == IDC_EDIT1 | iCtrlID == IDC_EDIT2 | iCtrlID == IDC_EDIT3 | iCtrlID == IDC_EDIT4 | iCtrlID == IDC_EDIT5)
return CDialogEx::PreTranslateMessage(pMsg);
}
return TRUE;//过滤掉消息pMsg->message,使按键无效输入时没有咚咚声,同时界面不会获取到pMsg->message信息
}
return CDialogEx::PreTranslateMessage(pMsg);
}
更多推荐


所有评论(0)