山东大学软件工程应用于实践——WeaselTSF(二)

本文深入探讨了Windows Text Services Framework (TSF)的架构及其优势,通过WeaselTFS实例讲解了关键接口如ITfTextInputProcessorEx、ITfThreadMgrEventSink和ITfContext等在输入法开发中的作用。TSF提供了一个应用与输入法之间的间接层,确保一致的输入体验。此外,还介绍了如何处理键盘事件、编辑上下文和 Composition Session的管理。
摘要由CSDN通过智能技术生成

2021SC@SDUSC

TSF的构架图

在这里插入图片描述
从上面构架图可以看到,TSF提供一个位于应用和输入法实现的间接层(一个Text service/TIP可以是一个输入法,或语音识别,TIP就是一个输入法提供的一个服务,比如百度输入法提供“语音、手写、键盘”输入,那就是3个Tip,但是一般我们都是用键盘输入,所以可以简单认为Tip是一种输入法)。所以,TSF的优点在于,它是一个设备无关,语言中立,可扩展的系统;同时给用户提供一致的输入体验。任何TSF-enabled应用程序都能从任何text service接受文字输入,而不用考虑Text source的具体细节。

TFS代码实例

    #include <windows.h>
    #include <msctf.h>
     
    int _tmain(int argc, TCHAR* argv[])
    {
   
        CoInitialize(0);
        HRESULT hr = S_OK;
     
        //PunCha:创建Profiles接口被
        ITfInputProcessorProfiles *pProfiles;
        hr = CoCreateInstance(  CLSID_TF_InputProcessorProfiles,
            NULL,
            CLSCTX_INPROC_SERVER,
            IID_ITfInputProcessorProfiles,
            (LPVOID*)&pProfiles);
     
        if(SUCCEEDED(hr))
        {
   
            IEnumTfLanguageProfiles* pEnumProf = 0;
            //PunCha:枚举所有输入法咯
            hr = pProfiles->EnumLanguageProfiles(0x804, &pEnumProf);
            if (SUCCEEDED(hr) && pEnumProf)
            {
   
                TF_LANGUAGEPROFILE proArr[2];
                ULONG feOut = 0;
                //PunCha:其实proArr这里应该写成 &proArr[0],因为里面只需要一个TF_LANGUAGEPROFILE变量!而且,proArr[1]都没用到过!
                while (S_OK == pEnumProf->Next
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值