击键消息
WM_KEYDOWN WM_KEYUP通常是不带Alt键产生的消息,wparam是虚拟键代码(在winuser.h中定义的VK_的常量),lparam包含属于击键的其他数据
lParam的32位分为6个域:
31:转换状态 正被释放为0 否则为1
30:键的先前状态 释放为0 否则为1
29:环境代码 在Alt按下后或WM_SYSKEYUP,WM_SYSKEYDOWN消息时为1. 2个例外, 1)活动窗口最小化,即无输入焦点,值为0, 2)特殊键盘消息
24:扩展键标志
23-16: 8位OEM扫描码
15-00: 16位重复计数(击键次数)
GetKeyState(VK_SHIFT) 返回值为负则按下了Shift键
GetKeyState(VK_CAPITAL) 返回值与键盘上的小灯保持一致 按下灯亮为正值 否则为负值
字符消息:
在windows消息循环中的TranslateMessage(&msg)函数将击键消息转换为字符消息,如果是字符则将消息放入消息队列,成为GetMessage从消息队列中得到的下一个消息
4类-WM_CHAR WM_DEADCHAR 从WM_KEYDOWN中得到, WM_SYSCHAR WM_SYSDEADCHAR从WM_SYSKENDOWN中得到
IsWindowUnicode(hwnd) 判断窗口是否由RegisterClassW注册的窗口类
死字符消息:用于处理特殊语言的键盘 例如德语键盘
插入符: 在WM_SETFOCUS期间CreateCaret 之后要ShowCaret, WM_KILLFOCUS期间DestroyCaret
CreateCaret
SetCaretPos
ShowCaret
HideCaret
DestroyCaret
非WM_PAINT消息时应HideCaret,在处理完消息后返回前再ShowCaret