Peng Lv

毋意,毋必,毋固,毋我。 言必行,行必果。

导航

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;

posted on 2010-02-03 16:49  Lvpengms  阅读(261)  评论(0编辑  收藏  举报