这周的任务好难——输入法。基本没概念。

      经过了两周的痛苦挣扎,总算对一些基本概念开始慢慢懂了。但是真正动手开发,感觉还是:路漫漫其修远兮。。。。。

      现在,我们先来直观的认识一下输入法的界面

                            

                           

                           

                          

这里我们可以看到总共有三个窗口:窗口1是我们的字符输入窗口

                                             窗口2是备选窗口,也就是根据我们输入的字符,输入法所匹配出来的字符串。

                                             窗口3是我们输入法的状态窗口,这个窗口我们可以设置中/英切换等状态。

要是我们把输入法,简化简化再简化,简化到窗口1和窗口2,我们就可以完成一个最粗陋的输入法。首先窗口1捕获键盘消息,显示我们输入的字符串,接着我们在从字库提取相应的字符,然后让窗口2显示出来,当用户选择了某一字符时,我们在把字符显示到应用程序上。这样我们不就完成了一个输入法么。但是,说起来容易做起来难啊。先不说那些漂亮的界面效果、各种键盘的处理、字库的匹配算法、输入字符的流畅显示、光标的定位,就单单让用户输入的字符在三个窗口(应用程序、窗口1、窗口2)之间顺利的通讯显示,都让我忙活了一天。

好在windows给我们提供了一个叫IME的东东。

IME:Input Method Editor

      IME是一种通过将键击转换成亚洲字符的方式在程序中输入亚洲文字的程序。IME 将键击解释为字符,然后将正确的解释插入到所使用的程序中。在windows系统中IME就是一个DLL

       在windows中有一种叫组件的编程思想,也就是大名鼎鼎的COM。而IME就是一个可拆卸COM(这一会儿我们会慢慢的详细解释)。现在我们只需要知道IME就是微软为输入法编程提供的控件,在这个控件里,微软为我们封装了一些底层的窗口处理,并且提供了一些外部接口,让我们来定制我们自己的输入法。这样只要我们一步步跟着IME接口走,我就可以实现一个比较简单的输入法。

       默认情况下,IME提供了两个主要的窗口:用户界面包括状态窗口、字母组合窗口和列选窗口,通过这个窗口,用户可以用键盘输入并且查看和选择想要的字符。

                                                           IME转换接口,由一组IME 模块引出函数提供,这些函数被IMM(输入法管理器)调用。

      应用程序可以使用输入法管理器(IMM)函数和消息来创建并且管理其自己的IME窗口

      (起初对“管理”两个字觉得很高深,怎么IMM和IME能管理窗口呢?IME不是DLL怎么又去管理了呢?IMM又是什么?现在明白了,所谓的IME和IMM不过是一个称呼,可以说是对一些输入法函数和消息的一个统称。“IMM管理”就说在系统的帮助下,用一些叫IMM****的函数帮我们实现了一些功能,也就是说我们可以不用关心他们了。现在我们就是老板了,只要安排好小E和小M就好了,他们去帮我调用那些小喽啰(底层API和消息)去实现我们的计划。)

SIP:Software Input Panel

       软件输入面板,也就是管理我们智能手机上常见的软键盘的COM组件。

有了这些强有力的组件我们的手机输入法的开发可以说是如虎添翼。这样我们的输入法有了组件去管理,可以为我们节省很多体力了。

胜利就在眼前了,只要我们掌握了这两个组件。我们的输入法就大功告成了。

但是别高兴的太早,这两个组件的学习也是很困难的,对于连DLL都不知道的我。一上来就是COM,在那接口海洋中,我可真是沉沉又浮浮。。。

posted on 2009-01-10 23:20  Ruby_Wang  阅读(2481)  评论(5编辑  收藏  举报