在较旧的 Win32 非 unicode 应用程序中,我有一个文本编辑器可以处理以下消息中的 IME -
WM_IME_COMPOSITION:
...
if (lParam & GCS_RESULTSTR) // flag to say the IME character has been fully entered
然后我们填充一个结构体并从中获取数据
ImmGetCompositionStringW
然后我们收到一条 WM_IME_CHAR 消息。这会传递到“正常”文本处理程序,并最终用我们之前检索到的数据填充文本框。
就是这样,到目前为止已经工作了25年了。
但是,在 Windows 11 中输入韩语不起作用(Windows 10 确实 可以)。 Windows 中的韩语输入法需要按两次按键才能输入每个字符;仅在按下第二个键完成字符后,应用程序才会看到 WM_IME_COMPOSITION 和 WM_IME_CHAR 消息。
第一个字符完成后,将不再接收 WM_IME_ .... 消息。他们刚刚不再来了。文本框按预期接收其他消息(例如WM_KEYDOWN)。在调试器中捕获它通常可以使它再次工作。
任何人都可以建议什么可能会失败吗?
好吧,不是完全理解,但这与 IME 如何完成组成字符有关 在 Windows 11(在我的非 unicode Win32 应用程序中)输入韩语字符(韩文)时,您现在需要按空格键来完成字符输入,因为某些字符是上下文相关的并且依赖于多个键盘输入来完成 "例如,键盘序列‘G’ㅎ‘N’후‘G’훟产生单个字符。\n"‘G’‘空格’‘N’‘空格’‘G’‘空格’进入这个ㅎㅜㅎ
在我的 UI 中它停止接受字符不是很用户友好,我还没有解决方案(我尝试添加一个计时器和 SendMessage (..., WM_CHAR, 32, 0) 来模拟空格按下酒吧,但它会给出奇怪的结果)。