类:

CCandidateWindow,候选字窗口

CCompositionPricessorEngine,拼写引擎

CSampleIME,主程序

CStringRange, 一个特殊的字符串类 见于 SampleIMEBaseStructure.h

在中文模式下,不是所有按键都会送给输入法处理,这里定义了所有支持的按键:CCompositionProcessorEngine::InitKeyStrokeTable()。


CSampleIME 中定义了拼写引擎_pCompositionProcessorEngine  和候选字列表提供者 _pCandidateListUIPresenter,后者包含一个候选字窗口。


CSampleIME:

CCompositionProcessorEngine* _pCompositionProcessorEngine;

CCandidateListUIPresenter *_pCandidateListUIPresenter;

CCandidateWindow *_pCandidateWnd;

以上就构成了输入法的主体框架。



首先,在中文模式下,不是所有按键都会送给输入法处理,这里定义了所有支持的按键:CCompositionProcessorEngine::InitKeyStrokeTable()。注意,其中的键值,并非按键符号的ASCII码,而是键盘按键的 keycode,只不过恰好26字母的keycode==ASCII,具体请百度。


然后,当用户按下了一个按键,首先会被传递到这里:CSampleIME::OnTestKeyDown(),为什么是Test呢?就是测试以下这个按键是否需要处理。如果需要处理,就传递给CSampleIME::OnKeyDown(),也就是交给输入法处理了。当用户松开这个按键的时候,也相应地依次传递给 CSampleIME::OnTestKeyUp() 和 CSampleIME::OnKeyUp()。


接下来,被支持的按键,如果不是删除键,就被传递到这里:CSampleIME::_HandleCompositionInput();如果是删除键,则传递到:CSampleIME::_HandleCompositionBackspace();这两个分支里面各自经历了一系列过程,但最终都是调用CCompositionProcessorEngine::GetReadingStrings()产生了一个拼写文本,然后再调用CCompositionProcessorEngine::GetCandidateList()获得一个候选字列表。什么是拼写文本呢?就是输入的时候带有下划线的那部分还没有确认上屏的文本。


至此,输入法的基本面貌已经有了,但是还差一步,就是确认拼写文本,把候选字上屏。一般这是由空格或者回车来实现的。但是这个最后一步,也是极其的繁琐,最终在CSampleIME::_TerminateComposition() 结束这个拼写过程。


摘抄整理自:https://blog.csdn.net/fonx/article/details/82156415



相关推荐

iME输入法编程心得(转载) 1

原文地址:https://www.cnblogs.com/freedomshe/archive/2012/11/30/ime_learning.html自然语言处理的输入法作业成品没有做出来,但不想再

输入法编程可能用的到的api接口 iME结构

输入法管理器:GetSystemMetrics(82) // 常量: SM_IMMENABLED 确定是否已启用 IMMIME开发就是实现类似“输入法名字.ime”这样一个动态库(编译的时候通常将.

Windows iMM-iME汉字输入法

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

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

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

64位输入法Dll入 (tsf)方案

微软两种输入法方案XP和XP以前是imm(Input Method Manager)输入方案.xp之后的系统是imm和TSF(Text Service Framework)输入方案.共存. win8

tsftExt sErvicEs fraMEwork)和输入法

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

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

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

输入法tsf框架候选栏定位研究

在开发输入法应用的时候,我们需要让候选栏时刻跟踪输入光标的位置,来进行输入。但候选栏定位不准,一直会困扰输入法的开发者。windows老的输入法框架imm在部分场景下比如chrome应用中会定位不准,

tsf输入法

TSF 即文本服务框架的英文缩写微软官方文档(文本服务框架) https://learn.microsoft.com/zh-cn/windows/win32/tsf/text-services-fra

[输入法]Qt实现键盘

在使用输入法的时候,为了输入一些特殊字符我们往往会用到软键盘和符号大全。符号大全和软件盘是一类程序,主要实现的就是通过界面点击向目标程序输出对应的符号。这里介绍一下如何通过QT编写软键盘类程序,实现软