WM_CHAR重复响应问题
我用WH_GETMESSAGE挂钩,来获取wm_char消息,我键盘按一个a他会响应很多次重复发两次a给我,我找了下资料说键盘按下和抬起都会发送消息,可是我实验过不是这样...
我用WH_GETMESSAGE挂钩,来获取wm_char消息,我键盘按一个a他会响应很多次重复发两次a给我,我找了下资料说键盘按下和抬起都会发送消息,可是我实验过不是这样的,他还是会多次抬起按下,谁知道这个是什么原因
展开
1个回答
展开全部
以下供参考。
按下一个键会响应两个消息WM_KEYDOWN和WM_CHAR,前者先响应,后者后响应,WM_CHAR需要经过TranslateMessage函数 处理后响应,如果按住一个键会不断产生这两个消息,上面说的是一般键,不包括功能键
功能键如shift、ctrl等键不会产生WM_CHAR消息
如果松开按键会产生WM_KEYUP消息
WM_KEYUP可能触发TranslateMessage函数。
重载CWinApp的虚拟函数:ProcessMessageFilter(int code,LPMSG lpMsg)
在这个函数里判断lpMsg->hwnd 是否为你想要处理的对话框句柄,再判断lpMsg->message为WM_KEYDOWN或WM_KEYUP
按下一个键会响应两个消息WM_KEYDOWN和WM_CHAR,前者先响应,后者后响应,WM_CHAR需要经过TranslateMessage函数 处理后响应,如果按住一个键会不断产生这两个消息,上面说的是一般键,不包括功能键
功能键如shift、ctrl等键不会产生WM_CHAR消息
如果松开按键会产生WM_KEYUP消息
WM_KEYUP可能触发TranslateMessage函数。
重载CWinApp的虚拟函数:ProcessMessageFilter(int code,LPMSG lpMsg)
在这个函数里判断lpMsg->hwnd 是否为你想要处理的对话框句柄,再判断lpMsg->message为WM_KEYDOWN或WM_KEYUP
追问
他只有在用到浏览器中的输入框的时候是返回一次的,其他富输入框的时候都是多次的,这个是为什么啊,怎么解决?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询