自定义了一个控件类,为了能让控件响应快捷键,需要重载父对话框的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);
}
自定义控件响应快捷键
本文介绍如何通过重载对话框的WM_KEYDOWN消息使自定义控件响应快捷键,并避免系统警告提示音的问题。文章详细解释了如何阻止对话框处理已由控件响应的快捷键。
2189

被折叠的 条评论
为什么被折叠?



