博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TSF自定义候选词列表界面
阅读量:6825 次
发布时间:2019-06-26

本文共 1149 字,大约阅读时间需要 3 分钟。

概述

TSF(Text Service Framework),已经取代IMM(Input Method Manager),成为win8+系统的输入法框架。现在有个需求,触摸屏上要使用软键盘(虚拟键盘,已经有了)输入中文,当需要输入的时候自动弹出软键盘,系统自带的屏幕键盘不能满足需求。尽管网上也有的例子,但是win10上没有测试通过,另外系统自带软键盘的界面风格跟我们的应用程序不符。所以希望自定义的软键盘(不用实现输入法)可以提供候选词列表以及组合字符串。

实现思路

首先想到的是,直接调用TSF接口把一个字符串转换成候选词,主要接口ITfFnSearchCandidateProvider,测试了微软拼音、百度拼音、搜狗拼音以及QQ拼音,只有搜狗拼音可以拿到接口,但却拿不到候选词。想来这个接口对输入法的主要功能没有意义,所以很多输入法没有实现这个接口。

此法不通,另寻他法,从网上看到全屏游戏中经常会隐藏输入法的候选词界面自己提供,需要输入法支持,接着测试了前面的那些输入法,发现它们在win10中都可以隐藏候选词界面,而且除了搜狗(C#下拿不到ITfUIElement接口),其他输入法都可以拿到候选词。使用了GitHub上.Net平台TSF的一个封装。

主要接口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 

转载于:https://www.cnblogs.com/ShengM/p/5620814.html

你可能感兴趣的文章
Linux获取进程执行时间
查看>>
C 标准库IO缓冲区和内核缓冲区的区别
查看>>
【转】人工智能的局限性
查看>>
jQuery事件委托
查看>>
Python 多人聊天工具 ( 多线程 )
查看>>
06_工作流调度器概述
查看>>
C#中重写(override)和覆盖(new)的区别
查看>>
Thread 中的start()
查看>>
apache配置中ProxyPassReverse指令的含义
查看>>
Dropping TSO features since no CSUM feature
查看>>
层的问题,
查看>>
修改鼠标图标的方法
查看>>
系统模块
查看>>
就算神游 之二:行路 3
查看>>
java把数据到指定文件
查看>>
【POJ】1692 Crossed Matchings
查看>>
一种基于矩的椭圆目标的亚像素级边缘定位方法
查看>>
jsoncpp在Windows和Linux下的安装
查看>>
Python调用C++类
查看>>
JavaScript中this详解
查看>>