TSF自定义候选词列表界面

简介: 原文:TSF自定义候选词列表界面 概述 TSF(Text Service Framework),已经取代IMM(Input Method Manager),成为win8+系统的输入法框架。现在有个需求,触摸屏上要使用软键盘(虚拟键盘,已经有了)输入中文,当需要输入的时候自动弹出软键盘,系统自带的屏幕键盘不能满足需求。
原文: 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 

目录
相关文章
|
6月前
|
JavaScript 前端开发 搜索推荐
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
不想要网页默认的右键菜单栏,怎么封装一个可以自定义的右键菜单组件?
107 0
|
3月前
|
JavaScript 前端开发
Vue实现Element UI框架的自定义输入框或下拉框在输入时对列表选项进行过滤,以及右键列表选项弹出菜单进行删除
本文介绍了如何在Vue框架结合Element UI库实现自定义输入框或下拉框,在输入时对列表选项进行过滤,并支持右键点击列表选项弹出菜单进行删除的功能。
65 0
若依如何创建二级页面菜单,点击目录后,右侧空白的悬浮空白的内容,点击系统管理的菜单管理,上级菜单点击主类木有个小三角,选择我们之前创建的主类目
若依如何创建二级页面菜单,点击目录后,右侧空白的悬浮空白的内容,点击系统管理的菜单管理,上级菜单点击主类木有个小三角,选择我们之前创建的主类目
|
6月前
Qt表格中的自定义编辑组件---------------自定义代理QStyledItemDelegate
Qt表格中的自定义编辑组件---------------自定义代理QStyledItemDelegate
72 5
|
JavaScript
fastadmin如何在列表的操作中添加其他按钮
fastadmin如何在列表的操作中添加其他按钮
246 0
|
JavaScript
fastadmin如何自定义一个列表上的按钮。
fastadmin如何自定义一个列表上的按钮。
341 0
|
小程序 API
【小程序】案例 - 本地生活(列表页面)
【小程序】案例 - 本地生活(列表页面)
165 0
【小程序】案例 - 本地生活(列表页面)
|
开发者
自定义列表|学习笔记
快速学习自定义列表
自定义列表|学习笔记
html+css实战26-自定义列表
html+css实战26-自定义列表
249 0
html+css实战26-自定义列表
html+css实战27-自定义列表
html+css实战27-自定义列表
96 0
html+css实战27-自定义列表
下一篇
无影云桌面