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下中文输入法编辑器(转)相关推荐
- Windows CE下中文输入法编辑器
作者:macrozhang001 转自:http://blog.csdn.net/macrozhang001/article/details/5621123 CE包含了一种简体中文输入法编辑器,如果不 ...
- wince 默认输入法_wince下中文输入法
CE 包含了一种简体中文输入法编辑器,如果不想编写自己的输入法编辑器,那么可 以直接调用默认的.在讲解中文输入法编辑器之前顺便提一下国际化 ( Internationalization ),中文输入法 ...
- 关于ios下中文输入法 连续输入空格问题
h5移动端页面 ,在iOS下中文输入法长输入的情况,会将英文输入,并且中间有空格. 这个空格看上去跟普通的空格没什么区别,其实不然.通过string.charAt 方法 log出它的编码是8198,普 ...
- 英文环境下中文输入法的设置
英文环境下使用ibus输入法 centos安装的时候已经选择了中文支持,输入法也已经安装,但在英文环境下面竟然无法使用中文输入法,解决办法记录于此, 1.安装ibus(centos6以后已经默认安装) ...
- linux下中文输入法的安装(解决菜单栏输入法图标消失问题)
Ubuntu上的输入法主要有小小输入平台(支持拼音/二笔/五笔等),Fcitx,Ibus,Scim等.其中Scim和Ibus是输入法框架. 在Ubuntu的中文系统中自带了中文输入法,通过Ctrl+S ...
- linux 中文五笔输入法,Linux系统下中文输入法安装与配置技巧
今天,在LinuxSLC5.3上安装了中文输入法,过程如下: 1.安装中文字体库 yum install "font-chinese" 2.安装scim输入法 yum instal ...
- Manjaro下中文输入法问题
Fcitx 是 (Free Chinese Input Toy for X) 的英文缩写,中文名为小企鹅输入法,是一个以 GPL 方式发布的输入法框架, 编写它的目是为桌面环境提供一个灵活的输入方案, ...
- linux 输入法无法运行,Linux下中文输入法出现问题的排查步骤
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 使用中文Linux时,一个比较头疼的问题就是中文输入法的安装与配置.目前开发Linux发行版的大多是老外,他们不懂中文, ...
- IDEA 在 mac 下中文输入法使用英文标点符号
一.问题 mac 系统使用默认中文输入法并设置使用半角符号的情况下在IDEA中文输入状态下无法输出英文标点符号(半角); 二.环境 macOS Monterey 12.3.1 idea 2021.3 ...
最新文章
- 【Python 2.x和Python 3.x版本有什么区别】
- Java异常有多慢?
- Ksusha and Array (vector)
- vue+element 封装公共js代码
- 致力推广 Vim 的那个程序员走了,Vim 之父:我要把 9.0 版献给他
- 不能在本地计算机启动 dtc,win10系统dTC服务无法启动的操作技巧
- presto时间戳转字符串
- 《算法导论》第十四章----数据结构的扩张(动态顺序统计)
- 避免内存泄露及内存的规范化使用
- python实现寻找最长回文子序列
- android 使用adb命令安装安卓apk包
- 张一鸣:10年面试2000人,我发现混的好的人,全都有同一个特质
- mysql-DTL语言
- 客户旅程_指南针的300人工程团队不断交付的旅程
- 除尘器选型需要考虑的因素
- 烦人的弹窗Placing the unmodified “important.txt“ in the zip file with the agent jar in the same
- CityEngine学习资料——
- android启动百度地图应用并开始导航,android打开外部地图导航(百度、高德、腾讯)...
- 怎么用python编写程序计算标准差_自学生信Python(第五天)|如何计算标准差?...
- Android studio游戏开发就是这么简单:卡牌杀系列(核心UI篇:SufaceView的核心用法)