在这里插入图片描述

当焦点在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);
}

更多推荐