控件截获主对话框WM_KEYDOWN消息后按键所发出的警告音

自定义了一个控件类,为了能让控件响应快捷键,需要重载父对话框的WM_KEYDOWN消息,将消息截获,并发送给控件。

如:

BOOL COpenGLDemoDlg::PreTranslateMessage(MSG* pMsg)
{
	// TODO: Add your specialized code here and/or call the base class
	if (pMsg->message == WM_KEYDOWN)
	{
		m_ST_display.ResponseMessage(pMsg);
	}
	return CDialog::PreTranslateMessage(pMsg);
}

这样虽然控件可以正确响应快捷键,但按下快捷键时,控件会发出系统的警告提示音。

之所以会发出警告提示音,是因为消息虽然由控件先截获并响应,但之后依然发送给了对话框。而对话框并没有对这些快捷键进行响应,所以属于无效按键,就会发出系统提示音。

也就是说,警告提示音是由对话框发出的。为了避免该情况,子控件截获的消息,就不要再发送给对话框。

将对话框的PreTranslateMessage函数修改为如下:

BOOL COpenGLDemoDlg::PreTranslateMessage(MSG* pMsg)
{
	// TODO: Add your specialized code here and/or call the base class
	if (pMsg->message == WM_KEYDOWN)
	{
		m_ST_display.ResponseMessage(pMsg);
		return	TRUE;
	}
	return CDialog::PreTranslateMessage(pMsg);
}

你可能感兴趣的:(MFC)