• Windows编程学习笔记(六)


    第四章 键盘

    本章主要学习了windows键盘处理的过程,东西很杂碎,wParam lParam这两个重要的参数。

    /***************************************************************/

    队列和同步

        当使用者按下并释放键盘上的键时,产生的格式消息并不保存在消息队列中,windows在所谓的系统消息队列中保存这些消息。只有当Windows应用程序处理完前一个使用者输入消息时,Windows才会从系统消息队列中取出下一个消息,并将其放入应用程序的消息队列中。

    按键消息

    当按下一个键时,windowsWM_KEYDOWNWM_SYSKEYDOWN消息放入具有输入焦点的窗口的消息队列,当释放一个键时,windowsWM_KEYUPWM_SYSKEYUP放入消息队列。

    虚拟键码

    虚拟键码保存在WM_KEYDOWN WM_KEYUP WM_SYSKEYDOWN WM_SYSKEYUP中的wParam参数中,此代码标识按下或释放的按键。而lParam保存了下列6个字段32字节的信息:

    0~15: 16-Bit Repeat Count 16~23: 8-bit OEM Scan Code 24: Extended Key Flag 29: Context Code 30: PreviousKeyState 31: Transition State;

        虚拟键码中由四个键 VK_LBUTTON ,VK_RBUTTON,VK_MBUTTON,VK_CANCEL,我们不能从键盘消息中捕获这几个键码,我们只能从鼠标消息中捕获他们。

    /***********************************************************/

    ·键的先前状态:如果在此之前键是释放的,则键的先前状态为0,否则为1 WM_KEYUP WM_SYSKEYUP消息中总是设定为1.

    ·转换状态:如果键正被按下,则转换状态为0;如果键正被释放,则转换状态为1。对WM_KEYDOWN或者WM_SYSKEYDOWN消息,此字段为0;对WM_KEYUP或者WM_SYSKEYUP消息,此字段为1

    ·位移状态

    在处理按键消息时,您可能需要知道是否按下了位移键(ShiftCtrlAlt)或开关键(Caps LockNum LockScroll Lock)。通过呼叫GetKeyState函数,您就能获得此信息。例如:

    iState = GetKeyState (VK_SHIFT) ;

    如果按下了Shift,则iState值为负(即设定了最高位置位)。如果Caps Lock键打开,则从

    iState = GetKeyState (VK_CAPITAL) ;

    传回的值低位被设为1。此位与键盘上的小灯保持一致。

    /**************************************************************/

    当我们需要捕获一些字符按键,可以用WM_CHAR捕获字符按键。例如在窗口消息处理函数中:

    case VM_CHAR:

    switch(wParam)

    {

        case ‘a’:

             do something;

             break;

        case ‘b’:

             do something else]

             break;

    }

    Break;

  • 相关阅读:
    如何用微软StreamInsight 处理和分析实时数据
    网站压力测试软件WebBench以及压测Jexus
    Xamarin 开源应用汇集
    微软开源 C++ REST SDK
    Visual Studio 2010/2012 Pro Power Tools
    深入浅出事件流处理NEsper(一)
    将Windows日志转换为Syslog
    事件流处理框架NEsper for .NET
    WCF技术剖析之二十一: WCF基本的异常处理模式[上篇]
    WCF技术剖析之二十一:WCF基本异常处理模式[下篇]
  • 原文地址:https://www.cnblogs.com/lvpengms/p/1662808.html
Copyright © 2020-2023  润新知