给你一篇转自vckbase的文章.doc

给你一篇转自vckbase的文章.doc

ID:59466030

大小:24.50 KB

页数:6页

时间:2020-11-02

给你一篇转自vckbase的文章.doc_第1页
给你一篇转自vckbase的文章.doc_第2页
给你一篇转自vckbase的文章.doc_第3页
给你一篇转自vckbase的文章.doc_第4页
给你一篇转自vckbase的文章.doc_第5页
资源描述:

《给你一篇转自vckbase的文章.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、给你一篇转自vckbase的文章  首先我们需要明白输入法是什么东西。目前常用的输入法基本上有两种类型:外挂式(如早期的万能五笔)及输入法接口式(InputMethodEditor-IME)。外挂式比较简单,就是一个exe文件,通过模拟一些Windows输入消息来给当前处于活动状态的编辑窗口输入文字,一个显著的优点是输入法只要启动一次,就可以在所有进程中使用;但缺点不不容忽视,首先实现起来也不容易,一个更大的不足是兼容性不够好,通常一个Windows版本需要一人对应的输入法版本,此外这类输入法为了能够截获用户输入,通

2、常需要挂接键盘钩子,容易造成系统不稳定或者效率不高。大部分的输入法还是采用IME来实现,下面本文主要讨论一下IME编程需要注意的问题及解决办法。IME是什么?IME是在Windows平台上使用的标准的输入法接口规范。它实质是一个DLL,Windows为这个DLL定义一系列的接口,不同的接口实现指定的功能。程序员在编写输入法程序时只需要实现这些接口并导出就可以作为输入法使用。关于具体接口的定义不是本文的重点,如果您需要了解只需要在网络中搜索“输入法编程指南”就可以明白,更多信息参考MSDN。刚开始输入法编程最棘手的问题

3、通常是程序框架搭好了却不知道如何使用及调试。这里涉及到一个很重要的问题就是输入法的安装。输入法就是Windows的一个插件,需要先进行注册,Windows才能识别并使用。为此您需要先将您生成的DLL复制到系统目录(WindowsSystem32)再调用APIImmInstallIME就可以实现了,在我的实践中是先编一个简单的程序来做安装工作,在每次输入法重新编译完成以后调用一次以完成输入法的注册。这里还有一个需要注意的问题是:Windows提供了一种机制,它允许输入法程序一旦启动就就不再退出,这就意味着如果你的程序

4、代码经过修改需要重新安装时将不得不重新启动电脑。在IME定义的接口中有一个接口是提供IME的初始化的,它就是BOOLWINAPIImeInquire(LPIMEINFOlpIMEInfo,LPTSTRlpszUIClass,LPCTSTRlpszOption),下面的代码来自我写的输入法:BOOLWINAPIImeInquire(LPIMEINFOlpIMEInfo,LPTSTRlpszUIClass,LPCTSTRlpszOption){lpIMEInfo->dwPrivateDataSize=sizeof(CON

5、TEXTPRIV);//系统根据它为INPUTCONTEXT.hPrivate分配空间lpIMEInfo->fdwProperty=IME_PROP_KBD_CHAR_FIRST

6、#ifdef_UNICODEIME_PROP_UNICODE

7、#endifIME_PROP_SPECIAL_UI

8、IME_PROP_END_UNLOAD;lpIMEInfo->fdwConversionCaps=IME_CMODE_FULLSHAPE

9、IME_CMODE_NATIVE;lpIMEInfo->fdwSentenceCaps=I

10、ME_SMODE_NONE;lpIMEInfo->fdwUICaps=UI_CAP_2700;lpIMEInfo->fdwSCSCaps=0;lpIMEInfo->fdwSelectCaps=SELECT_CAP_CONVERSION;_tcscpy(lpszUIClass,CLSNAME_UI);returnTRUE;}lpIMEInfo->fdwProperty告诉Windows系统您编写的输入法的一些特征,注意一下IME_PROP_END_UNLOAD这个标志,有了它您编写的输入法会随着启动您的输入法的应用程序

11、(如NotePad)的退出而退出,否则它将长驻于系统中,这也是为什么很多输入法在升级安装时需要首先重新启动电脑的原因。在这个接口中还有一点需要特别注意,那就是lpIMEInfo->dwPrivateDataSize,至少我是经过很多次测试才基本证实Windows根据该值为INPUTCONTEXT.hPrivate分配空间。此外如果您修改了这个接口,按照我个人的经验是需要重新调用ImmInstallIME来安装。在安装完成后,在输入法列表中应该已经有了您自己的输入法。点击调试,由于它是一个DLL,您需要先选择一个宿主程

12、序,一般选择“记事本”,以调试方式启动“记事本”后,在这个“记事本”中打开您的输入法,您就可以在源代码中设置断点了。需要说明的是,VC6.0调试DLL不太好用,首先需要打上SP5或者SP6,这样也不能够在DLL启动的时候就设置断点,推荐使用.net来调试。输入法上下文(HIMC):HIMC是什么?在输入法编程时必然要接触到输入法上下文这个术语,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。