WM_CHAR 与WM_KEYDOWN的区别

2025-04-30 12:02:16
推荐回答(3个)
回答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_CHAR是由WM_KEYDOWN消息translate()之后产生的,然后再发送给窗口过程。比如说按下E键后产生WM_KEYDOWN消息,经过translate()处理后产生变成WM_KEYDOW,WM_CHAR 2 个消息传递给窗口过程。

回答3:

WM_CHAR 只是字母,不包含特殊字符如ctrl等.
WM_KEYDOWN则所有都包含.所以ctrl+E选择WM_KEYDOWN