Windows编程-处理键盘事件(2)

关于WM_KEYDOWN的消息中传递的是该键的虚拟扫描码,不是ASCII码。它传递了键被按下时的特征,细节的描述如下:

wParamThe virtual-key code of the nonsystem key. See Virtual-Key Codes.

lParamThe repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown following.例如,我们实现一个打印输入的virtual code的程序,只要在前面的程序中,填入:

 1     case WM_KEYDOWN:
 2         {
 3             char virtual_code = wparam;
 4             int key_state = lparam;
 5     
 6          // get a graphics context
 7          hdc = GetDC(hwnd);
 8 
 9          // set the foreground color to green
10          SetTextColor(hdc, RGB(0,255,0));
11          
12          // set the background color to black
13          SetBkColor(hdc, RGB(0,0,0));
14          
15          // set the transparency mode to OPAQUE
16          SetBkMode(hdc, OPAQUE);
17 
18          // print the virtual code and key state
19          sprintf(buffer,"WM_KEYDOWN: Character = 0X%X   ",virtual_code);
20          TextOut(hdc, 0,32, buffer, strlen(buffer));
21 
22          // release the dc back
23          ReleaseDC(hwnd, hdc);        
24         
25         }break;

 

最后要介绍的是键盘状态函数:GetAsyncKeyState(). 函数的原型如下:

short GetAsyncKeyState(int virtual_key); 返回值的最高位为1表示该键被按下,否则该键被松开。一般我们可以采用简单的宏代替来完成测试。

View Code
#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)

 

转载于:https://www.cnblogs.com/bruce81/archive/2013/02/12/2910352.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值