1

我正在尝试使我们的应用程序正确处理国际输入。由于我们自己处理文本输入和字体渲染,我编写了自定义代码来处理相应的 WM_IME_* 消息。

现在,这一切都很好,除了一个例外:当我们的应用程序主窗口打开时,语言栏不会让我选择任何选项。我可以将输入语言设置为日语或韩语,但没有显示用于选择输入法(如韩文或平假名)的菜单。然后,当我打开另一个窗口(任何其他窗口,无论是我们的应用程序窗口之一,还是标准的“保存文件”对话框)时,选项就会出现。一旦到了那里,即使我关闭另一个窗口,它们也会留下来。IME 输入将在主窗口中按预期工作。但是,正如所解释的,只有我先打开另一个窗口。

现在,windows 是如何决定是否显示输入法选项的呢?由于某种原因,windows 似乎无法将我们的主窗口识别为支持 Unicode。我该如何解决?

在此先感谢您的任何建议,

乔纳斯

编辑:我注意到的另一件奇怪的事情是,对于我的主窗口(它不会让我更改输入法),当我更改输入语言时,我会收到一条 WM_INPUTLANGUAGECHANGEREQUEST 消息 - 我将其传递给 DefaultWindowProcW。对于让我更改输入法的窗口,我没有收到请求,我只收到一条 WM_INPUTLANGUAGECHANGE 消息(其他窗口我没有收到)。

4

2 回答 2

1

好的,经过长时间的搜索,我已经能够找出是什么破坏了这一点。我们在子窗口上调用 SetFocus 以响应 WM_FOCUS 消息,这样当窗口被带到前面时,特定的子窗口总是获得焦点。显然,这会混淆窗口的 IME 代码,并使其不知道窗口可以处理 IME 输入。

于 2010-02-25T11:25:57.103 回答
0

一些笔记

  • 文本服务是按窗口工作的,而不是系统范围的,所以即使它在一个窗口中打开,另一个窗口仍然需要打开它,(除非用户将其设置为默认值)

  • 并且文本服务在任何窗口中都不起作用,要启用它,目标计算机需要启用以下设置

    替代文字

于 2010-02-24T11:22:43.187 回答