处理控制字元
处理按键和字元讯息的基本规则是:如果需要读取输入到视窗的键盘字元,那么您可以处理WM_CHAR讯息。如果需要读取游标键、功能键、Delete、Insert、Shift、Ctrl以及Alt键,那么您可以处理WM_KEYDOWN讯息。
但是Tab键怎么办?Enter、Backspace和Escape键又怎么办?传统上,这些键都产生表6-13列出的ASCII控制字元。但是在Windows中,它们也产生虚拟键码。这些键应该在处理WM_CHAR或者在处理WM_KEYDOWN期间处理吗?
经过10年的考虑(回顾这些年来我写过的Windows程式码),我更喜欢将Tab、Enter、Backspace和Escape键处理成控制字元,而不是虚拟键。我通常这样处理WM_CHAR:
死字元讯息
Windows程式经常忽略WM_DEADCHAR和WM_SYSDEADCHAR讯息,但您应该明确地知道死字元是什么,以及它们工作的方式。
在某些非U.S.英语键盘上,有些键用於给字母加上音调。因为它们本身不产生字元,所以称之为「死键」。例如,使用德语键盘时,对於U.S.键盘上的+/=键,德语键盘的对应位置就是一个死键,未按下Shift键时它用於标识锐音,按下Shift键时则用於标识抑音。
当使用者按下这个死键时,视窗讯息处理程式接收到一个wParam等於音调本身的ASCII或者Unicode代码的WM_DEADCHAR讯息。当使用者再按下可以带有此音调的字母键(例如A键)时,视窗讯息处理程式会接收到WM_CHAR讯息,其中wParam等於带有音调的字母「a」的ANSI代码。
因此,使用者程式不