WM_IME_CHAR
分类:技术
于是又是一篇木有技术含量的笔记。
对于 Unicode 窗口,WM_IME_CHAR
和 WM_CHAR
没有区别,wParam
都是一个 WCHAR
,即输入的字符。
对于非 Unicode (DBCS) 窗口,WM_IME_CHAR
的 wParam
即由输入法生成的一个字符。这个字符既有可能是单字节字符也有可能是双字节字符。如果是单字节字符,那么和 WM_CHAR
没什么区别;如果是一个双字节字符,那么 wParam
高 8 位为 Leading byte,低 8 位为 Continuation Byte。
所有经由输入法产生的字符都会产生 WM_IME_CHAR
消息而不是 WM_CHAR
,但 DefWindowProc
会把 WM_IME_CHAR
转换为相应的一个或两个 WM_CHAR
消息。
例如:
- 不开输入法输入「9」 → 收到
WM_CHAR
(0x0039) - 打开输入法输入「9」 → 收到
WM_IME_CHAR
(0x0039) → 收到WM_CHAR
(0x0039) - 打开输入法输入「笨」 → 收到
WM_IME_CHAR
(0xB1BF) → 收到WM_CHAR
(0x00B1) → 收到WM_CHAR
(0x00BF)