TSF自定义候选词列表界面
概述
TSF(Text Service Framework),已经取代IMM(Input Method Manager),成为win8+系统的输入法框架。现在有个需求,触摸屏上要使用软键盘(虚拟键盘,已经有了)输入中文,当需要输入的时候自动弹出软键盘,系统自带的屏幕键盘不能满足需求。尽管网上也有自动弹出软键盘的例子,但是win10上没有测试通过,另外系统自带软键盘的界面风格跟我们的应用程序不符。所以希望自定义的软键盘(不用实现输入法)可以提供候选词列表以及组合字符串。
实现思路
首先想到的是,直接调用TSF接口把一个字符串转换成候选词,主要接口ITfFnSearchCandidateProvider,测试了微软拼音、百度拼音、搜狗拼音以及QQ拼音,只有搜狗拼音可以拿到接口,但却拿不到候选词。想来这个接口对输入法的主要功能没有意义,所以很多输入法没有实现这个接口。
此法不通,另寻他法,从网上看到全屏游戏中经常会隐藏输入法的候选词界面自己提供,需要输入法支持UILess Mode,接着测试了前面的那些输入法,发现它们在win10中都可以隐藏候选词界面,而且除了搜狗(C#下拿不到ITfUIElement接口),其他输入法都可以拿到候选词。使用了GitHub上.Net平台TSF的一个封装TSF.TypeLib。
主要接口ITfUIElementSink,当输入法程序需要显示界面时,TSF Manager通过这个接口通知应用程序,应用程序可以选择是否使用输入法提供的候选词界面。
实现步骤如下:
- 获取ITfThreadMgrEx接口实例;
- 调用ITfThreadMgrEx::ActivateEx激活输入法,激活标识传入TF_TMAE_UIELEMENTENABLEDONLY;
- 获取ITfSource接口实例,.Net下通过ITfThreadMgrEx强制转换拿到;
- 实现ITfUIElementSink接口的三个方法BeginUIElement、UpdateUIElement和EndUIElement,在BeginUIElement中可以通知输入法自定义候选词界面,在UpdateUIElement获取候选词并展现。
候选词拿到了,接着还想在软键盘上显示组合字符串,从网上查到ITfContextOwnerCompositionSink接口可以实现,但是自己测试没有成功,最终使用ITfTextEditSink和ITfThreadMgrEventSink接口拿到,参考了MSDN上的这篇文章。
总结
需求实现,明明研究了辣么久,总结下来就这么一丢丢,o(︶︿︶)o 唉,嘿嘿,不管了,反正自己个儿觉着拯救了全世界^O^ ^O^ ~~
栗子在这里o(∩_∩)o
最新文章
- c# winform vlcPlayer播放器
- iOS开发——UI基础-自定义构造方法,layoutSubviews,Xib文件,利用Xib自定义View
- SQL同列合并
- jquery unbind bind
- E - Trees on the level
- 客户端(android,ios)与服务器通信
- <;video>;和<;audio>;标签
- 转:windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)
- 转:测试用书(出处:cnblog--liangshi)
- 优雅的封装ajax,含跨域
- how tomcat works 读书笔记(一)----------一个简单的web服务器
- PDF 补丁丁 0.6.0.3427 版发布(修复提取图片问题)
- jquery 禁止回车事件响应
- Toast不消失问题
- HTML+JS+JQuery不可以使用status
- hdu 2476";String painter";(区间DP)
- 12.11 Daily Scrum
- Image Lazy Load:那些延时加载图片的开源插件(jQuery)
- error MSB8008: 指定的平台工具集(V120)未安装或无效。
- C# 键盘中的按键对应KeyValue
热门文章
- ffmpeg常用参数一览
- Android应用开发中webview上传文件的几种思路
- [转载]Matlab中fft与fftshift命令的小结与分析
- HDU 5794 - A Simple Nim
- Ubuntu安装中文字体
- MYSQL5.6数据库ZIP安装以及VS中使用注意事项
- isNUll ,对于sql中的一个表的description的NULL和空格的处理
- HTML5 Web存储(Web Storage)技术及用法
- 模块化开发,SesJS简单总结
- [汇编语言]-第五章[bx]和loop指令