阳光VIP

少壮不努力,老大徒伤悲。平日弗用功,自到临期悔。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

多功能输入法--内码转换模块设计与实现(2)

Posted on 2012-02-16 20:07  阳光VIP  阅读(263)  评论(0编辑  收藏  举报

2.多功能输入法简介

 

 

2.1 混合模式输入

所谓混合模式是不用切换输入法可以应用各种输入,本程序可以接受五笔,英语,拼音,词组,和笔画的输入。候选字的排列顺序为1.五笔,2.英语,3.拼音,4.词组。笔画输入是数字键,因此不会同时和以上的输入方法混合。表格1是根据输入产生的候选字。

 

表格1 混合候选字列表

输入的编码

候选字列表

W

1.人 2.挖 3.瓦 4.蛙 5.哇 6.娃 7.洼

Wo

1.伙 2.我 3.握 4.窝 5.卧 6.挝 7.沃

Wm

1.仙 2.外贸 3.外貌 4.外贸出口 5.外面

Wom

1.我们

women

1.我们

School

1.学校

7894

1.水 2.木 3.乤 4.五 5.市 6.币

 

2.2 单模式输入

单模式输入分为以下几种:1.五笔,2.英语,3.拼音,4笔画,5.英文。各种单模式输入的特点请看表2.

 

表格2 单模式输入

输入模式

输入编码

候选列表

五笔

aa

1.式 2.工a 3.工aa 4.葡萄牙ah 5.工区aq

英语

abs

1.缺席ence 2.缺席的ent 3.吸收orb

拼音

aim

1.爱美ei 2.暧昧ei 3.爱民in 4.爱慕u

笔画

789

1.朩4 2.木4

英文

abo

1.aboard 2.about 3.above

 

单模式下有比较详细的候选列表,用户可以根据候选列表提供的信息来比较快的定位到相应的字。并且单模式下检索字库的速度比混合模式的速度快。

 

2.3 后台管理

后台管理主要分为:常规设置,热键,外观,词库设置。

 

 

 

1 常规设置

 

 

 

 

 

2 外观设置

 

 

  

 

 

 

 

 

 

 

  

 

 

 

 

4 词库管理

 

 

 

  

 

3.设计原理

 

 

3.1 Windows 系统消息通信机理

                                                                                   

Window 操作系统是一个基于消息循环的系统,任何事件的发生处理都是通过传递消息来告知的。操作系统将输入信息以消息的形式传送给窗口过程(WINDOW PROCEDURE)。操作系统和一般的应用程序都可以产生消息,用户的一系列事件也会产生消息。每当有输入产生的时候,例如:用户敲打键盘,移动鼠标或者是点击窗口的关闭按钮的时候,操作系统将会产生输入事件(EVENT),操作系统也将程序对系统的访问,修改等操作生成消息,例如:当应用程序改变系统字体资源或者RESIZE它自己所属的窗口。而应用程序可以通过产生消息来指引自己的窗口去完成指定的任务或者和其他应用程序的窗口进行通信。操作系统发送消息时用到的四个参数是:WINDOW句柄( Window Handle ),消息标识(Message Identifier),和两个消息参数 WPARAM ,LPARAM。

WINDOW句柄:接收消息处理的窗口的地址。

消息标识:一个预定义的常量,用于决定是那个消息。

消息参数:它们的含义由上面两个参数的内容决定,不同的窗口和消息标识对这两个参数有不同解析,例如:是指定的数据或者是数据指针等等。

消息的路由(Message Routing):操作系统分发消息到窗口过程的时候主要有两种方法:

1.POST    消息发送到一个先进先出的消息队列中。这些消息称为排队消息(Queue Message),大部分是来自用户的鼠标或者键盘的输入,例如:WM_MOUSEMOVE,WM_LBUTTONDOWN,WM_KEYDOWN,WM_KEYDOWN等等。

2.SEND    消息被直接发送到窗口处理过程中,称为非排队消息(Nonqueue Message)。

 

3.2普通字符输入的工作流程

 

1. 用户在点击特定的窗口,例如:记事本,使变成激活状态,接收用户消息。

2. 用户敲打键盘,由键盘驱动程序捕获事件后向操作系统的消息队列发送键盘消息。

3. 操作系统从消息队列中取出一个消息,判断是否需要转发。转发:把消息发到对应的窗口句柄的消息处理程序中。不转发:交给系统默认处理。

4. 应用程序接收操作系统转发的键盘消息,并根据消息的内容作出相应的处理。

5. 应用程序在客户区显示对应的字符。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                  

 

 

                       图5 字符输入流程图

 

3.3 简单消息截获处理过程

 

 

 

                         

 

1.安装消息拦截程序,设置要拦截的消息类型

2.当用户点击应用程序时,产生鼠标事件如WM_LBUTTONDOWN,此时,该消息不会直接发送到系统消息队列,而时先流向消息拦截程序。

3.拦截程序根据需要的条件判定是否拦截该消息,如果不符合要求的消息,交还到系统的消息队列。如果符合要求的消息,就会转发给相应的处理程序。

4.在相应的消息处理程序中,再根据输入的消息类型进行不同的操作,例如输入的是字母就进行简单查询,输入的是数字,可以进入选字状态。

5.最后消息处理程序再把处理结果转发给相应的程序。

 

简单消息拦截过程如图6所示:

 

 

 

 

 

 

图6 消息拦截过程

 

3.4IMM—IME汉字输入过程

 

IMM-IME 是Windows 内部输入法管理接口,是系统自己定义的一套框架程序。IMM是输入法管理器,管理当前系统活动的各个输入法编辑器,维护输入法编辑器和应用程序之间的通信。

IMP是输入法分析器(Input Method Phrase),通过系统注册表及INI文件对系统中所安装的各种汉字输入法进行维护。

IME 是输入编辑器(Input Method Editor),是开发人员要实现的输入法程序。每一个运行的输入法编辑器相当于混合语言键盘布局中的一种,将用户输入的编码转换成相应的汉字字符。

 

 

 

 

  7 IMM-IME 汉字输入流程

 

 

 

 

 

 

       IME 转换接口工作过程

 

 

             

 

 

 

 

 

8 IME转换接口流程

 

 

具体过程是:当用户选择某输入法时,IMM首先调用ImeInquire 获取IME的相关信息(属性,UI窗口类,可选项),根据此可进行IME的初始化,创建IMEUI窗口等,所以ImeInquire 是输入法转换接口心须实现的第一个函数。IMM接着调用ImeSelect 初始化输入上下文,与此同时产生WM_IME_SELECT消息传给DefWindowProcDefWindowProc 将此消息转发给缺省IME窗口,在此窗口内创建UI窗口,UI窗口根据输入上下文创建组件窗口。当输入法被激活或隐藏时,IMM调用 ImeSetActiveContext 使得UI 窗口能够获取当前输入上下文并通知组件窗口,令其刷新显示。当输入法的状态发生变化时,产生消息WM_IME_NOTIFYIMM调用NotifyIME及时更新输入法的当前状态,比如:显示/隐藏候选窗口,选定某个候选项,更新候选窗口页起始位置和页尺寸,更新输入上下文内容,修改编码字符串内容等等。当用户通过控制面版或系统图标设置输入法属性时,IMM调用ImeConfigure 显示属性设置对话框,供用户配置输入法的可选项。当用户产生键盘事件时,IMM调用ImeProcessKey根据当前IME的状态判定IME是否需要处理这个按键,如果需要处理,IMM调用ImeToAsciiEx 进行转换,将结果送交应用程序,否则直接送交应用程序。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                     

 

 

 

图3 热键设置