1.虚拟码
……
2.激活/关闭窗口对键盘响应的消息
激活消息:WM_SETFOCUS
CreateCaret(,,,);//创建光标
SetCaretPos(,); //设置光标位置
ShowCaret(HWND); //在活动焦点的窗口中显示光标(只需第一次设置光标位置后调用显示函数)
关闭消息:WM_KILLFOCUS
DestroyCaret();
3.键盘消息
1)字符消息
系统字符消息
WM_SYSCHAR:系统字符
WM_SYSDEADCHAR:系统死字符
非系统按键消息
WM_CHAR:非系统字符
WM_DEADCHAR:非系统死字符
2)按键消息
系统按键消息:与ALT键相组合的组合键(无论用户处理否,都需要最后调用DefWindowProc(hWnd,iMessage,wParam,lParam))
WM_SYSKEYDOWN
WM_SYSKEYUP
非系统按键消息:
WM_KEYDOWN
WM_KEYUP
注意:
1).除Print键之外都有“按下”消息。
2).所有键都存在“弹起”消息。
3).字符、符号、数字、Tab、回车键等才右“字符”消息。
4.参数信息
WPARAM:虚拟键值
LPARAM:根据其不同的位数表示的含义的不同可以分为以下七个部分:
(1) 重复计数位(0~15位):重复计数是消息所代表的按键数目,除键一直被按着外,重复计数是1。当键按下并一直按着时,窗口过程往往来不及处理这些按键消息,此时Windows操作系统就将几个按键消息组合起来,并增加重复计数。
(2) OEM扫描码(16~23位):OEM扫描码是键盘发送的码值,由于此域是设备相关的,因而此值往往被忽略。
(3) 扩展键标志(24位):扩展键标志在有Alt键(或Ctrl键)按下时为1,否则为0。
(4) 保留位(25~28位):保留位是系统缺省保留的,一般不用。
(5) 关联码(29位):关联码用来记录某键与Alt键的组合状态,若按下Alt,当WM_SYSKEYDOWN消息送到某个激活的窗口时,其值为1,否则为0。
(6) 键的先前状态(位30):键的先前状态用于记录先前某键的状态,对于WM_SYSKEYUP消息,其值始终为1。
(7) 转换状态(31位):转换状态的消息是始终按着某键所产生的消息,若某键原来是按下的,则其先前状态为0。转换状态指示键被按下还是被松开。当键被按下时,对应于者WM_SYSKEYDOWN消息,其值始终为0,当键被松开时,其转换状态为1,对应于WM_SYSKEYUP消息,其值始终为1。
按键消息的wParam参数包含了识别按下的键的虚键码。键的扫描码是设备相关的,扫描码经过操作系统的转换后称为设备无关的虚键码,这些虚键码定义在Windows包含文件中。读者可以在相关的帮助文档中查到虚键码及其对应按键的信息。
在WinMain函数的消息循环中包含了TranslateMessage函数,它的主要功能是把按键消息转化为字符消息,但只有当键盘驱动程序把键盘字符映射成ASCII码后才能产生WM_CHAR消息。同样,字符消息也可以分成两类即:系统的非系统的。
Windows支持两种字符集:OEM和ANSI。OEM是IBM字符集,在Windows中已经很少使用;现在大多使用的是ANSI字符集。为了保持程序的兼容性,Windows提供了几个用于转换这两种字符集的函数,如下所示:
(1) ToOem 将ANSI字符串转化为OEM字符串
(2) ToOemBuff 将缓冲区中的ANSI字符串转化为OEM字符串
(3) ToAnsi 将OEM字符串转化为ANSI字符串
(4) OemToAnsi 将缓冲区中的OEM字符串转化为ANSI字符串