死字元讯息
Windows程式经常忽略WM_DEADCHAR和WM_SYSDEADCHAR讯息,但您应该明确地知道死字元是什么,以及它们工作的方式。
在某些非U.S.英语键盘上,有些键用於给字母加上音调。因为它们本身不产生字元,所以称之为「死键」。例如,使用德语键盘时,对於U.S.键盘上的+/=键,德语键盘的对应位置就是一个死键,未按下Shift键时它用於标识锐音,按下Shift键时则用于标识抑音。
当使用者按下这个死键时,视窗讯息处理程式接收到一个wParam等于音调本身的ASCII或者Unicode代码的WM_DEADCHAR讯息。当使用者再按下可以带有此音调的字母键(例如A键)时,视窗讯息处理程式会接收到WM_CHAR讯息,其中wParam等於带有音调的字母「a」的ANSI代码。
因此,使用者程式不需要处理WM_DEADCHAR讯息,原因是WM_CHAR讯息已含有程式所需要的所有资讯。Windows的做法甚至还设计了内部错误处理。如果在死键之後跟有不能带此音调符号的字母(例如「s」),那么视窗讯息处理程式将在一行接收到两条WM_CHAR讯息-前一个讯息的wParam等於音调符号本身的ASCII代码(与传递到WM_DEADCHAR讯息的wParam值相同),第二个讯息的wParam等於字母s的ASCII代码。
当然,要感受这种做法的运作方式,最好的方法就是实际操作。您必须载入使用死键的外语键盘,例如前面讲过的德语键盘。您可以这样设定:在「控制台」中选择「键盘」,然後选择「语系」页面标签。然後您需要一个应用程式,该程式可以显示它接收的每一个键盘讯息的详细资讯。下面的KEYVIEW1就是这样的程式。