套娃开始:

当键盘事件被触发时,获得的参数是ITfContext。但是ITfContext并不能直接修改内容添加文字等,

需要调用 RequestEditSession,传入一个 ITfEditSession 才能实现内容的修改。


RequestEditSession是什么?

ITfContext::RequestEditSession    获取访问权限    实际上是为了获取一个用于执行编辑会话的 ITfEditSession 接口的指针

源码中搜索 pContext->RequestEditSession 查看例子

HRESULT RequestEditSession(
  [in]  TfClientId     tid,        //包含一个 TfClientId 值,该值标识要与之建立编辑会话的客户端。
  [in]  ITfEditSession *pes,        //指向调用用于执行编辑会话的 ITfEditSession 接口的指针。
  [in]  DWORD          dwFlags,        //一个请求权限的常量 一般为 读写权限  TF_ES_SYNC | TF_ES_READWRITE
  [out] HRESULT        *phrSession
);

RequestEditSession 之后,ITfEditSession::DoEditSession 会被(迅速)调用,可以在这个时候实现对内容的修改,也可以干别的事情。比如创建或者结束 一个ITfComposition。

为什么这么设计,我猜测是从线程管理的角度。被输入的应用程序不可能锁住UI线程等待输入,但是多线程同时修改,可能会产生线程同步问题。操作系统可能会在你触发 RequestEditSession 的时候迅速锁住 UI 线程,输入,然后释放 UI 线程。

ITfEditSession是什么?

点击查看

















相关推荐

输入法开发基础(一)

输入法作为使用频率最高的软件之一,现有市场已经几乎被搜狗输入法垄断。也正是由于垄断,导致现有的输入法开发项目和开发资料比较少。在这里将自己最近收集的一些内容整理出来,供想做输入法开发的开发人员参考。输

[输入法]TSF框架中预先上屏的字符管理和控制

在TSF框架中有时候我们需要通过框架上屏一些占位字符来进行定位,这时候我们就需要对预先上屏的字符进行管理,以微软的输入法为例图中红框框选出来的部分就是预先上屏的字符。在TSF框架中通过ITfRange

获取输入法坐标

以下是微软TSF输入法取坐标的方法,从里面扒出来的int 取坐标(ITfContext *pContext, TfEditCookie ec, ITfComposition* pRangeCompos

微软输入法TSF SampleIME 源码分析(转载)

类:CCandidateWindow,候选字窗口CCompositionPricessorEngine,拼写引擎CSampleIME,主程序CStringRange, 一个特殊的字符串类 见于 Sam

输入法的注册、安装和卸载

注册输入法输入法的安装和普通应用程序有一个大的区别是,除了复制文件到安装目录、做一些必要的设置外,还需要向Windows系统注册这个输入法。我们前期一篇博文 TSF(Text Service Fram

逗比的输入法实现(二):基础概念和常用接口

为什么叫 Meow?因为这是给猫用的输入法。。。目录(一):基本情况(二):基础概念和常用接口(三):整体构架(四):编辑和候选(五):界面管理和无界面模式(六):词库和候选算法(七):皮肤的实现(八

Windows IMM-IME汉字输入法

1.IMM与IMEIMM是Input Method Manage(输入法管理器)的缩写,IME是Input Method Editor(输入法编辑器)的缩写。微软公司在Windows 95/98/NT

TSF(Text Services Framework)和输入法

1.TSF输入接口IMM-IME架构成熟,稳定,易于实现,在Windows中被广泛使用,甚至在Linux曾大量使用的中文输入接口SCIM中也可以看到IMM-IME的影子。但是由于IMM-IME在操作权

基于文本服务框架(TSF)的拼音输入法研究与实现

摘要:目前的输入法大多采用输入法管理器-输入法编辑器(IMM-IME)进行开发,对于微软发布的新型输入法技术―文本服务框架(TSF)的研究一直比较滞后,该文论述了 TSF 的基本构成、主要接口、输入法

快速搭建一款输入法(封装输入法引擎)

输入法最核心的是输入法引擎,输入法引擎负责加载和管理输入法配置和输入法的词库,输入法引擎对用户输入的拼音字符串进行处理并返回对应的候选列表。通过引入输入法引擎我们就可以将我们输入法的拼音串转换成对应的