zoukankan      html  css  js  c++  java
  • Windows程序设计 读书笔记 键盘。

    一、键盘事件处理过程。

    1,击键。

    2,windows和键盘驱动程序将硬件扫描吗转化为格式消息,放在windows维护的"系统消息队列"中。

    3,windows从系统消息队列中,取一个消息,发送给当前获得焦点的窗口的应用程序消息队列。

    4,应用程序处理该该消息完毕后,windows才能接下来从"系统消息队列"中去获得下一个消息。

      因为前面的消息处理可能会影响后一个消息的处理情况,比如tab按键可能会影响获得焦点的控件等等。

    二、击键产生的消息:

    系统键 WM_SYSKEYDOWN WM_SYSKEYUP

    非系统键 WM_KEYDOWN WM_KEYUP

    系统键由alt+其他键组成,程序一般忽略系统键,并把它直接交给DefWindowProc处理,然后接受处理后的结果。

    三、键盘消息

    msg.wParam 存放虚拟键码。

    msg.lParam 存放其他信息。

    四、虚拟键码。

    对于键盘硬件来说,按键是按照键的物理顺序编码的,但程序中不这样,所以有一套对应的虚拟键码。

    VK_开头的,可以在程序中查看定义的地方看。

    ctrl + pause break = esc

    五、lParam信息:

    31位 : 转换状态 --- 正在被按下OR释放

    30位 : 键先前的状态

    29位 : 环境代码 --  是否按下ALT

    24位 : 扩展键标志

    23-16位:OEM扫描吗

    15-0位:重复计数  -- 有几下没处理的按键消息

    取出某一位的算法: 0x80000000 & msg.lParam

    六、检测某按键是否按下:

    GetkeyState(CK_SHIFT)。如果结果的高位被置位,也就是为负,就表示按下:

    if (GetKeyState(VK_SHIFT)<0)

    if (HIWORD(GetKeyState(VK_SHIFT)))

    七、击键消息和字符消息。

    WM_KEYDOWN 产生 WM_CHAR

    八、插入符函数

    CreateCaret

    SetCaretPos

    GetCaretPos

    ShowCaret

    HideCaret

    DestroyCaret

    GetCaretBlinkTime

    SetCaretBlinkTime

  • 相关阅读:
    windows C++ 网络编程
    typedef void (*Fun) (void) 的理解——函数指针——typedef函数指针
    获取屏幕分辨率(C/C++)
    随手记
    【SQLite】可视化工具SQLite studio
    C++宽窄字符串转换
    并发编程1——一个简单的多线程程序
    css中:after和:before的作用及使用方法
    uniapp—App—自定义导航栏
    vue—封装无数据时默认展示组件
  • 原文地址:https://www.cnblogs.com/aoyihuashao/p/1712500.html
Copyright © 2011-2022 走看看