四類字元訊息

字元訊息可以分為四類,如表所示。
字元
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註冊的視窗類別。

相關詞條

熱門詞條

聯絡我們