内容簡介
表
字元 | WM_CHAR |
死字元 | WM_DeADCHAR |
非系統字元 | WM_SYSDEADCHAR |
系統字元 | WM_SYSCHAR |
WM_CHAR和WM_DEADCHAR訊息是從WM_KEYDOWN得到的;而WM_SYSCHAR和WM_SYSDEADCHAR訊息是從WM_SYSKEYDOWN訊息得到的(我将簡要地讨論一下什麼是死字元)。
有一個好訊息:在大多數情況下,Windows程式會忽略除WM_CHAR之外的任何訊息。伴随四個字元訊息的lParam參數與産生字元代碼訊息的按鍵訊息之lParam參數相同。不過,參數wParam不是虛拟鍵碼。實際上,它是ANSI或Unicode字元代碼。
這些字元訊息是我們将文字傳遞給視窗訊息處理程式時遇到的第一個訊息。它們不是唯一的訊息,其他訊息伴随以0結尾的整個字串。視窗訊息處理程式是如何知道該字元是8位元的ANSI字元還是16位元的Unicode寬字元呢?很簡單:任何與您用RegisterClassA(RegisterClass的ANSI版)注冊的視窗類别相聯系的視窗訊息處理程式,都會獲得含有ANSI字元代碼的訊息。如果視窗訊息處理程式用RegisterClassW(RegisterClass的寬字元版)注冊,那麼傳遞給視窗訊息處理程式的訊息就帶有Unicode字元代碼。如果程式用RegisterClass注冊視窗類别,那麼在UNICODE識别字被定義時就呼叫RegisterClassW,否則呼叫RegisterClassA。
除非在程式寫作的時候混合了ANSI和Unicode的函式與視窗訊息處理程式,用WM_CHAR訊息(及其他三種字元訊息)說明的字元代碼将是:
(TCHAR) wParam
同一個視窗訊息處理程式可能會用到兩個視窗類别,一個用RegisterClassA注冊,而另一個用RegisterClassW注冊。也就是說,視窗訊息處理程式可能會獲得一些ANSI字元代碼訊息和一些Unicode字元代碼訊息。如果您的視窗訊息處理程式需要曉得目前視窗是否處理Unicode訊息,則它可以呼叫:
fUnicode = IsWindowUnicode (hwnd) ;
如果hwnd的視窗訊息處理程式獲得Unicode訊息,那麼變數fUnicode将為TRUE,這表示視窗是用RegisterClassW注冊的視窗類别。