输入法的窗口问题(50分)

  • 主题发起人 主题发起人 iseek
  • 开始时间 开始时间
I

iseek

Unregistered / Unconfirmed
GUEST, unregistred user!
输入法的窗口是一种特别的顶层窗口,它好像不抢别的EDIT的输入焦点。<br>我想知道如何设计。200分,但是,不知是不是有人会,我先拿50分出来,待问题解决后我<br>再把分送上。<br>说实话,我不抱太大的希望。:-)<br>——iseek
 
首先,我认为中文输入法窗口有如下特性:<br>&nbsp; 1、中文输入法进程一直运行,所谓的“关闭”、“打开”只是窗口隐藏和显现<br>&nbsp; 2、中文输入法窗口不具有焦点属性<br>&nbsp; 3、中文输入法的窗口显现时将截获所有的键盘消息<br>&nbsp; 4、中文输入法窗口是悬浮窗口[菜单及网络蚂蚁的拖放窗口具有此特性]<br>根据以上特性,以下是一嵌入式操作系统上中文输入法实现原理:<br>首先中文输入法进程在系统启动时即加载运行[此时窗口不可见],它监视所有的键盘消息,<br>当有激活中文输入法的热键消息时,使自己主窗口可见,截获所有的键盘消息,处理自己关心<br>的消息[如生成汉字],之后将自己不关心和处理后的消息分发到原来输入目标窗口。<br>我认为兰点linux的中文输入也是这样的原理。<br>当然,windows由于其消息机制多采用“主动申请”模式,所以能实现当目标窗口没有输入焦点时<br>不能激活中文输入的选字窗口(如浏览某些网页时),以上方案不能实现此功能。<br><br><br>
 
DELPHI就没有一个成熟的输入法的例子,钱达智的词库输入法也不行。<br>实际上不必一定要用IME机制才能做输入法,有EXE形式的输入法。但好像都是<br>用C 做的,不知DELPHI行不行。<br>
 
楼上的stonepine对Windows中的输入法(IME)的理解错的比较多。<br><br>1、输入法本身是DLL,不是独立的进程。而输入法中的输入窗口、列表窗口和状态窗口等,<br>其owner的handle都是当前相关联的应用程序。如在记事本中打开输入法,则这些窗口的<br>owner是当前的记事本程序实例;再同时打开另一个记事本,则这个记事本实例又拥有另外<br>的输入法窗口实例。<br><br>3、输入法并不截获键盘消息,该工作仍然是由Windows的核心程序来完成的,应该<br>是user32.dll。核心程序截获所有的键盘消息,然后再传给输入法进行处理。<br><br>其实,Windows的输入法原理,在Microsoft的MSDN上面,都有比较清楚的说明。
 
外挂式输入法初步实现 &nbsp;http://www.2ccc.com/article.asp?articleid=942<br>&nbsp;其实真正的输入法就是象aabbcc250 说的那样!!我的这个不是!!
 
后退
顶部