美文网首页
windows按键事件之一二

windows按键事件之一二

作者: 赵海洋 | 来源:发表于2018-12-20 15:11 被阅读0次

在一个项目(可以想像成响应键盘动作的小游戏)中,出招需要用到Alt键,一开始想只使用普通的WM_KEYDOWN和WM_KEYUP来处理,取其wparam就是按键的virtual key了。
但是发现ALT键只能偶尔收到WM_KEYUP,并不能收到WM_KEYDOWN,经过实现有以下组合情况:

1. ALT -> ALT+1 -> ALT -> 无按键

image.png

ALT转到ALT+1,然后先放开按键1,再放ALT,这时只有ALT是消息不对称的,即按下时WM_SYSKEYDOWN,松开是WM_KEYUP。

2. ALT->ALT+1->1->无按键

image.png

ALT转到ALT+1,然后先放开按键ALT. 这种情况就和上面的消息组合不一样了,这时ALT和1键都是消息不对称的了,按下时WM_SYSKEYDOWN,松开是WM_KEYUP。

3. 1 -> ALT+1 -> 1 -> 无按键

image.png
这种情况先按下1,会有一个1的WM_KEYDOWN消息,并且接着有多个WM_KEYDOWN,根据LParam能区分出来是长按时重复发送的消息。
然后按下ALT,有一个WM_SYSKEYDOWN消息,先松开ALT,有一个WM_SYSKEYUP消息。
但是松开1时并没有WM_KEYUP消息了。
后来发现这个问题仅在窗口风格是WS_OVERLAPPEDWINDOW时出现,如果窗口风格是WS_POPUP时就不会出现。

4. ATL->无按键->ALT

快速连点两次ALT时,消息如下:

image.png
仅有一个WM_SYSKEYDOWN的消息,有两次松开的消息。
后来发现这个问题仅在窗口风格是WS_OVERLAPPEDWINDOW时出现,如果窗口风格是WS_POPUP时就不会出现。

5.F10的特殊性

F10触发WM_SYSKEYDOWN消息

6.ACCELERATORS

如果Fxx键注册了系统加速键,如F11,则没有WM_SYSKEYDOWN的消息了,只有普通的WM_KEYUP消息。
这个的原因似乎是在消息处理循环中检测到加速键后,中断了消息继续发送。

if (::TranslateAccelerator(m_hWndPaint, m_hAccTable, pMsg))
        {
            return true;
        }

相关文章

  • windows按键事件之一二

    在一个项目(可以想像成响应键盘动作的小游戏)中,出招需要用到Alt键,一开始想只使用普通的WM_KEYDOWN和W...

  • 键盘事件

    键盘事件 onkeydown 按键按下事件 onkeypress 按键产生字符事件 onkeyup 按键弹起事件 ...

  • Android按键事件

    一、按键事件App开发对按键事件的检测与处理,主要包括如何检测控件对象的按键事件、如何检测活动页面的物理按键、以返...

  • day_010 Python中的pygame_2

    一、事件 鼠标的事件:QUIT:关闭按键被点击事件MOUSEBUTTONDOWN:鼠标按键按下事件MOUSEBUT...

  • Android8.0 焦点处理流程(二)

    该篇就看看按键焦点导航,从输入事件流入到ViewRootImpl说起 按键事件流入 按键触摸事件都会封装为Inpu...

  • Python 学习笔记 057

    本节预告 指定按键和组合按键事件 31、指定按键事件 win.bind("a", func) 只按a生效 32、组...

  • Android 事件

    事件分为按键事件分发,触摸事件分发,还有轨迹球事件,轨迹球已经被淘汰,按键事件分发主要是在TV上,使用遥控器做按键...

  • 按键事件

    start()添加监听 新建方法

  • Android的事件分发

    Android中的事件分为按键事件,触摸事件,轨迹球事件等,其中按键事件是基于焦点分发的,触摸事件是基于位置分发的...

  • 6.5键盘事件

    onkeydown : 当按下键盘按键时触发的事件。 onkeyup : 当键盘按键抬起时触发的事件。 onkey...

网友评论

      本文标题:windows按键事件之一二

      本文链接:https://www.haomeiwen.com/subject/ctpykqtx.html