我想做一个处理用户输入的控件,所以我想能够处理不同的键盘,其中一种方法是使用IME。
如果您不处理它,当您激活IME (例如,激活日语书写)时,会出现一个浮动窗口。我找到了需要处理的消息,但我不知道如何将我捕获的键发送到IME,以及何时才能获得有效的转换字符。
发布于 2009-08-08 21:54:30
我是Microsoft SDE,曾经维护(Windows和Office)朝鲜语输入法一段时间……
不幸的是,最好的IME API文档是由非Microsoft站点提供的:
(这是微软的功劳,后两个曾经是视窗驱动程序开发工具包的一部分)
这是微软的官方文档:Input Method Manager (MSDN)
还有一个新的、更高级的IME,它基于文本服务框架(TSF),Microsoft希望您使用它,但它更复杂,并且可以很好地模拟旧的API。如果您不需要任何高级功能(例如通过平板电脑/语音识别/更高级的输入法等输入),那么使用旧的API就足够了。
关于文本服务框架最好的文档是由另一位微软开发人员编写的TSF Aware Blog。如果你走这条路,Eric Brown甚至可以亲自回答你的问题。
这是微软关于TSF的官方文档:Text Services Framework (MSDN)
您可能会发现TSF的一个有用的功能是抑制IME的渲染(例如,需要渲染IME本身的全屏游戏需要)。只需告诉TSF您的应用程序将呈现IME,然后实现一个空的呈现方法:UILess Mode Overview (MSDN)
发布于 2009-01-11 23:55:14
我不认为你想抑制IME的显示。除了测试之外,我从未使用过输入法,但据我所知,输入法是使用英语键盘输入非英语字符的预期/默认方式。
如果你正在编写一个控件,并且想要完全支持输入法,我认为你有两个选择是响应各种Windows消息(如WM_IME_START_COMPOSITION、WM_IME_COMPOSITION等)。或者使用文本服务框架(TSF)。据我所知,TSF是未来的趋势,在Vista和Windows7中,所有的IME代码都是基于TSF的,而Windows消息仍然存在,以便与旧程序兼容。
https://stackoverflow.com/questions/434048
复制相似问题