CE包含了一种简体中文输入法编辑器,如果不想编写自己的输入法编辑器,那么可以直接调用默认的。在讲解中文输入法编辑器之前顺便提一下国际化(Internationalization),中文输入法及输入法编辑器只是国际化组件的一小部分。国际化是编写面向不同语言用户的软件过程中一个重要环节,CE的国际化组件包含很多小的组件 。
下表描述了组件的名称、功能:

名称 功能
Agfa字体压缩 支持字体压缩
字体版本 因为东亚字体占据内存较大,此组件提供了用于选择不同大小字体文件的选项
手写识别 手写识别引擎
多语言用户界面 提供给最终用户用于切换语言种类
National Language System 国家语言支持(包括日期、时间、数字、货币格式)
Transcriber应用程序 识别英语、法语、德语的手写识别程序
Unicode码支持 能够处理和显示Unicode码
日语IME 日语输入法编辑器
韩语IME 韩语输入法编辑器
简体中文IME 简体中文输入法编辑器
Shuang Pin IM 简体中文双拼输入法
GB18030 转换器 在GB18030到CE编码之间的转换
繁体中文IME 繁体中文输入法编辑器

  在定制内核的时候常会遇到这些组件,尤其是字体版本,选择不同的字体对于整个内核的大小影响很大。在定制内核的时候,选择PB提供的字体版本应该参照标题为"Font Versions"的帮助文档,在这个文档中详细的列举了东亚语言字体的文件名称、内容、正常大小和压缩大小。除了选择合适的字体版本外,还应该采用Agfa字体压缩技术,Agfa字体压缩技术的优点是能够减小字体占用的ROM和RAM空间,另外能够保证在压缩和解压缩后数据不丢失。如果采用字体压缩,Agfa压缩技术将字体压缩成TrueType格式,并另存为扩展名为".ac3"的文件,那么CE在使用字体的时候首先寻找扩展名为".ac3"的文件。如果不采用字体压缩,CE将使用非压缩字体,如扩展名为".ttf"".ttc"的文件。下面讲述关于简体中文输入法编辑器的相关知识。

CE的输入法系统由下列几个部分组成:

  • IME(输入法编辑器)内核。包括和用户输入的语言相关的内容,比如输入法、文字库等
  • IME界面。包括状态窗口、写作窗口、候选窗口、指南窗口
  • IMM(输入法管理器)。负责在CE系统、应用程序、IME之间通信
  • 输入上下文。包括用户输入状态等
  • IME控制窗口。负责发送未处理的IME消息到IME

输入法系统的工作机制如下:
  当输入法系统启动后,用户按键盘,键盘消息被IMM发送到IME。IME处理消息内容,根据键盘消息的内容或者产生用于写作的字符,或者产生命令。当IME处理键盘消息后,它发送通知消息到当前获得焦点的窗口,如果这个窗口不能处理IME通知消息,那么通知消息被发送到IME控制窗口,控制窗口将消息返回到IME,IME做默认的处理工作(IME提供了完整的用户接口)。对于能够处理IME通知消息的窗口,被称之为IME-aware窗口,相反不能处理IME通知消息的窗口,被成为IME-unaware窗口。能够处理IME通知消息的窗口通过IMM 函数能够实现自定义的输入法编辑器。

输入上下文:
  输入上下文存储了IME的状态信息,它是IME的内部结构。对于每一个线程,系统创建和分配了一个默认的输入上下文,在线程内的每个窗口都共享输入上下文的内容。具体输入上下文的结构体定义包含在标题为"INPUTCONTEXT"的帮助文档中。从文档中看出,输入上下文包含对应窗口句柄、写作窗口和候选窗口和状态窗口的位置、字体、消息缓冲区等等。用函数ImmGetContext可以得到指定窗口对应的输入上下文的句柄。用ImmReleaseContext释放指定的输入上下文。如果不希望一个线程内的窗口都共享同一个输入上下文,那么可以调用函数ImmCreateContext来创建一个新的上下文,并调用函数ImmAssociateContext将新创建的输入上下文与指定的窗口关联。当不用这个新创建的上下文时,调用ImmDestroyContext来释放内存。调用函数ImmLockIMC能够得到一个指定的输入上下文的指针,通过这个指针可以访问输入上下文的数据。访问结束后调用函数ImmUnlockIMC,ImmUnlockIMC减少计算锁数量,直到释放句柄。关于输入上下文的例子代码如下:

HIMC hIMC = ImmCreateContext();   ///创建新的上下文
LPINPUTCONTEXT  lpIC;
lpIC = ImmLockIMC(hIMC);
....................              ///使用lpIC访问上下文数据
ImmUnlockIMC(lpIC);
ImmAssociateContext(hWnd, hIMC);   ///与窗口关联
ImmDestroyContext(hIMC);          ///最后释放上下文

下面是调用中文输入法的例子代码:

HIMC hIMC  = ImmGetContext(hWnd);   ///hWnd为当前窗口句柄
POINT  pt;
pt.x = 300;
pt.y = 200;
ImmSetStatusWindowPos(hIMC, &pt);     ///设置状态窗口位置
ImmSetOpenStatus(hIMC, TRUE);        ///打开中文输入法
ImmReleaseContext(hEdit, hIMC);      ///最后释放上下文

  我在开发过程中发现并非所有Imm函数都有效,通过对Pocket IME源码分析后证实了我的发现。但上述的函数都能够实现功能,对于只要能够打开并使用中文输入法的要求还是可以满足的。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126715/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-126715/

CE下中文输入法编辑器(转)相关推荐

  1. Windows CE下中文输入法编辑器

    作者:macrozhang001 转自:http://blog.csdn.net/macrozhang001/article/details/5621123 CE包含了一种简体中文输入法编辑器,如果不 ...

  2. wince 默认输入法_wince下中文输入法

    CE 包含了一种简体中文输入法编辑器,如果不想编写自己的输入法编辑器,那么可 以直接调用默认的.在讲解中文输入法编辑器之前顺便提一下国际化 ( Internationalization ),中文输入法 ...

  3. 关于ios下中文输入法 连续输入空格问题

    h5移动端页面 ,在iOS下中文输入法长输入的情况,会将英文输入,并且中间有空格. 这个空格看上去跟普通的空格没什么区别,其实不然.通过string.charAt 方法 log出它的编码是8198,普 ...

  4. 英文环境下中文输入法的设置

    英文环境下使用ibus输入法 centos安装的时候已经选择了中文支持,输入法也已经安装,但在英文环境下面竟然无法使用中文输入法,解决办法记录于此, 1.安装ibus(centos6以后已经默认安装) ...

  5. linux下中文输入法的安装(解决菜单栏输入法图标消失问题)

    Ubuntu上的输入法主要有小小输入平台(支持拼音/二笔/五笔等),Fcitx,Ibus,Scim等.其中Scim和Ibus是输入法框架. 在Ubuntu的中文系统中自带了中文输入法,通过Ctrl+S ...

  6. linux 中文五笔输入法,Linux系统下中文输入法安装与配置技巧

    今天,在LinuxSLC5.3上安装了中文输入法,过程如下: 1.安装中文字体库 yum install "font-chinese" 2.安装scim输入法 yum instal ...

  7. Manjaro下中文输入法问题

    Fcitx 是 (Free Chinese Input Toy for X) 的英文缩写,中文名为小企鹅输入法,是一个以 GPL 方式发布的输入法框架, 编写它的目是为桌面环境提供一个灵活的输入方案, ...

  8. linux 输入法无法运行,Linux下中文输入法出现问题的排查步骤

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 使用中文Linux时,一个比较头疼的问题就是中文输入法的安装与配置.目前开发Linux发行版的大多是老外,他们不懂中文, ...

  9. IDEA 在 mac 下中文输入法使用英文标点符号

    一.问题 mac 系统使用默认中文输入法并设置使用半角符号的情况下在IDEA中文输入状态下无法输出英文标点符号(半角); 二.环境 macOS Monterey 12.3.1 idea 2021.3 ...

最新文章

  1. 【Python 2.x和Python 3.x版本有什么区别】
  2. Java异常有多慢?
  3. Ksusha and Array (vector)
  4. vue+element 封装公共js代码
  5. 致力推广 Vim 的那个程序员走了,Vim 之父:我要把 9.0 版献给他
  6. 不能在本地计算机启动 dtc,win10系统dTC服务无法启动的操作技巧
  7. presto时间戳转字符串
  8. 《算法导论》第十四章----数据结构的扩张(动态顺序统计)
  9. 避免内存泄露及内存的规范化使用
  10. python实现寻找最长回文子序列
  11. android 使用adb命令安装安卓apk包
  12. 张一鸣:10年面试2000人,我发现混的好的人,全都有同一个特质
  13. mysql-DTL语言
  14. 客户旅程_指南针的300人工程团队不断交付的旅程
  15. 除尘器选型需要考虑的因素
  16. 烦人的弹窗Placing the unmodified “important.txt“ in the zip file with the agent jar in the same
  17. CityEngine学习资料——
  18. android启动百度地图应用并开始导航,android打开外部地图导航(百度、高德、腾讯)...
  19. 怎么用python编写程序计算标准差_自学生信Python(第五天)|如何计算标准差?...
  20. Android studio游戏开发就是这么简单:卡牌杀系列(核心UI篇:SufaceView的核心用法)

热门文章

  1. 浙大PTA-Python题库 编程题第一章(1-1~1-3)题解
  2. 使用BERT fine-tuning 用于推特情感分析
  3. 最好的天线基础知识!超实用 随时查询
  4. 数据库一致性、完整性
  5. 传实缴注册资本要5亿,那些想上市的P2P平台顶得住吗?...
  6. Qt 通过条件编译区分Debug和Release代码
  7. C3P0反序列化链学习
  8. 让HTML页面也可以实现全屏效果
  9. 将exe4j打包的java exe程序反编译过程
  10. 黑帽SEO人员是如何对网站优化的【认准SEO黑帽大牛】