分享
 
 
 

CE下中文输入法编辑器

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

CE下中文输入法编辑器

作者:付林林

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源码分析后证实了我的发现。但上述的函数都能够实现功能,对于只要能够打开并使用中文输入法的要求还是可以满足的。

写作时间:2004-10-28

未经本文作者同意,不准擅自转载本篇文章。联系作者请邮至 windowsce@tom.com 或 fllsoft@sina.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有