秀女升职记txt下载:WM_CHAR 与WM_KEYDOWN的区别

来源:百度文库 编辑:高考问答 时间:2024/05/06 01:37:16
API中的一个问题
消息循环中
while(GetMessage(&Msg,NULL,0,0))
{
TranslateMessage(&Msg);//翻译消息
DispatchMessage(&Msg);//将消息传递给窗口处理函数
}
return Msg.wParam;

TranslateMessage函数已经将按健消息转换成字符消息了,那末WndProc函数中进行case选择的时候,
case WM_KEYDOWN还有什么作用呢?简单的说:
比如键盘键入E键,那末是选择case WM_KEYDOWN还是case WM_KEYDOWN呢?
如果是ctrl+E呢,选择那个?

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)

你的问题问得不是很清楚,不过我想WM_CHAR是由WM_KEYDOWN消息translate()之后产生的,然后再发送给窗口过程。比如说按下E键后产生WM_KEYDOWN消息,经过translate()处理后产生变成WM_KEYDOW,WM_CHAR 2 个消息传递给窗口过程。

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