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)