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

自定义控件响应快捷键
本文介绍如何通过重载对话框的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);
}

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值