Formview单文档或对话框项目接受不到按键消息的解决办法

当对话框或formview界面上有控件时,由于焦点在控件上,因此wm_char,wm_keydown等按键消息会被控件捕获,而导致对话框或formview无法接受该类按键消息。这时候通常的解决方法是在对话框类或者forview类中重写PreTranslateMessage函数,该函数是在消息路由前的预处理函数,(经测试)该函数能够在控件处理按键消息之前对消息进行预处理。通常的解决思路是在该函数中将消息路由途径改变,即将消息的窗口句柄属性改变,由于该函数捕获到的按键消息是发送给控件的,因此pMsg->hwnd是控件的窗口句柄,只需将该句柄替换为formview或对话框的句柄即可。代码如下:

BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
{
       	if (pMsg->message==WM_CHAR)
	{
		pMsg->hwnd=m_hWnd;
		return FALSE;
	}

         return CFormView::PreTranslateMessage(pMsg);
}

 然后只需要在formview类或对话框类中相应wm_char消息即可。

 

另外,也可以在该函数中直接对wm_char或者wm_keydown进行相应的处理,通过pMsg->wparam参数即可判断是那个键被按下,对于wm_char消息,该参数保存的是按键的ASCII码;对于wm_keydown消息,该参数保存的按键的虚拟键值。

 

转载于:https://www.cnblogs.com/zhangyonghugo/p/3274390.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值