我想制作一个处理用户输入的控件,所以我希望能够处理不同的键盘,其中一种方法是使用IME。
如果你不处理它,当你有IME激活时会出现一个浮动窗口(例如日文写入活动)。我发现需要处理的消息,但我不知道如何发送我正在捕获到IME的密钥,以及何时获得有效的转换字符。
答案 0 :(得分:25)
我是Microsoft SDE,用于维护(Windows和Office)韩语IME一段时间......
不幸的是,最好的IME API文档由非Microsoft站点提供:
以下是Microsoft官方文档:Input Method Manager (MSDN)
还有一种基于文本服务框架(TSF)的新的,更高级的IME,微软希望您使用它,但它更复杂,旧的API也很好地模拟。如果您不需要任何高级功能(例如通过平板电脑/语音识别/发烧友IME /等输入),那么使用旧的API就足够了。
Text Services Framework上的最佳文档是由另一个Microsoft dev编写的TSF Aware Blog。如果你走这条路,Eric Brown甚至可以亲自回答你的问题。
以下是TSF的官方Microsoft文档:Text Services Framework (MSDN)
您可能觉得有用的TSF的一个特性是能够抑制IME的渲染(例如,需要自动渲染IME的全屏游戏)。只需告诉TSF您的应用将呈现IME GUI,然后实现空渲染方法:UILess Mode Overview (MSDN)
答案 1 :(得分:0)
我认为你不想让IME被显示出来。我从来没有用过其他的测试,但我的理解是IME是使用英文键盘输入非英文字符的预期/默认方式。
如果您正在编写控件并希望完全支持IME,我认为您拥有的两个选项是响应各种Windows消息(如WM_IME_START_COMPOSITION,WM_IME_COMPOSITION等)或使用文本服务框架(TSF) 。我的理解是TSF是未来,在Vista和Windows 7中,所有IME代码都基于TSF,Windows消息仍然存在,以便与旧程序兼容。