WM_CHAR消息与WM_KEYDOWN消息

各个评论的汇总:


1.

WM_CHAR消息只响应字符按键和部分控制符

(有很多控制字符不响应 不响应的键如下:
Tab键///Caps Lock大小写切换键//ESC键///F1~F12///SHIFT///CTRL///ALT///方向键///方向键上方键盘区///Num Lock键)

WM_KEYDOWN响兴所有按键消息(Alt键///Print Screen SysRq截屏键不响兴)

WM_CHAR区分大小写和SHIFT+数字,而WM_KEYDOWN只返回大写字母没有SHIFT作用
例如:
 按下F键 不管处于大写或小写状态 WM_KEYDOWN都返回70 (ASCII对应大写F) 而WM_CHAR区分大小写

 SHITF+1 WM_CHAR中的wParam是33 (ASCII对应!) WM_KEYDOWN中的是49 (ASCII对应1)


2.

WM_KEYDOWN和WM_CHAR
事件WM_KEYDOWN和WM_CHAR都是键盘消息,如果要对这两个有消息有所响应的话,就需要实行以下代码: 
while (GetMessage(&Msg,NULL,0,0)) { TranslateMessage(&Msg);
  //翻译消息 DispatchMessage(&Msg); //将消息传递给窗口处理函数 } return Msg.wParam;
  
 
TranslateMessage函数已经将按键消息转换成字符消息了,那么WndProc函数中需要对事件进行选择。
如:键入“D”键,就应该选择WM_CHAR,因为WM_CHAR 只是字母,不包含特殊字符如Ctrl等。
如果键盘键入的是“Ctrl+D”,则应该选择WM_KEYDOWN,因为WM_KEYDOWN既包含字母也包含特殊字符。
WM_CHAR是由WM_KEYDOWN消息Translate()之后产生的,然后再发送给窗口过程。
例如按下“D”键,产生WM_KEYDOWN消息,此消息经过Translate()处理后变成了WM_KEYDOW、WM_CHAR两个消息传递给窗口过程。

3.

WM_KEYDOWN:只要你按下键盘上的按键时就会发生;
WM_CHAR:只有按下字符键时才会产生。

可以说WM_CHAR只是WM_KEYDOWN的特殊情况

4.msdn:
The WM_CHAR message is posted to the window with the keyboard focus 
when a WM_KEYDOWN message is translated by the 

TranslateMessage function. The WM_CHAR message contains the character code of the key that was pressed. 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值