您的位置:首页 > 编程语言

Windows编程学习笔记(六)

2010-02-03 16:49 387 查看
第四章 键盘

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

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

队列和同步

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

按键消息

当按下一个键时,windows把WM_KEYDOWN或WM_SYSKEYDOWN消息放入具有输入焦点的窗口的消息队列,当释放一个键时,windows吧WM_KEYUP或WM_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。

·位移状态

在处理按键消息时,您可能需要知道是否按下了位移键(Shift、Ctrl和Alt)或开关键(Caps Lock、Num Lock和Scroll 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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: