【转载】浅析输入法原理
在這個模塊里進行文字的接收,處理,發送。
一.Windows 9x系統
?????? 系統的鍵盤事件有windows的user.exe軟件接收后,user.exe在將鍵盤事件傳導輸入法管理器(Input MethodManager,簡稱IMM)中,管理器 再將鍵盤事件傳到輸入法中,輸入法根據用戶編碼字典,翻譯鍵盤事件為對應的漢字(或漢字串),然后再反傳到user.exe中,user.exe再將翻譯后的鍵盤事件傳給當前正運行的應用程序,從而完成漢字的輸入。這個是windows 9x系統下的。
二,windows NT系統
?????? 這個是重點。
?????? Windows XP系統下的輸入法和9x系統的輸入法有很大區別,對輸入法的處理完全不同。這個是我花了一下午和一位論壇好友交流的結果,說是交流,其實就是他單向傳授與我,呵呵。廢話不多說,我們開始。
先看一段程序
[cpp] view plaincopyprint??????? 這是一個消息循環,直到r等于0,表示有WM_QUIT,r=-1表示出錯,是系統從消息隊列中取消息的一般過程。那么輸入法是怎么回事呢?
?????? 一般情況下GetMessage得到WM_KEYDOWN的wParam是虛擬鍵碼,如果我們開了輸入法,WM_KEYDOWN的wParam虛擬碼是VK_PROCESSKEY,TranslateMessage對一般的虛擬鍵碼是產生WM_CHAR,WM_SYSCHAR之類的,但是當TranslateMessage遇到了VK_PROCESSKEY,就會有特殊處理。這時候TranslateMessage就會把控制權交給DefWindowProc這個缺省的消息處理例程,DefWindowProc再通知輸入法程序的窗口,把那些候選的顯示出來,當你的你輸入法將接受到的虛擬碼做一系列轉換以后合成相應的漢字,輸入法再將合成好的WM_CHAR用PostMess插入消息隊列,Edit控件接受WM_CHAR顯示字符。
?????? 如果你沒有開輸入法WM_CHAR直接由 TranslateMessage產生。
流程圖如下:
有好東西不忘和大家分享一下,呵呵。
這種說法肯定有許多錯誤和不足,畢竟我是菜鳥,歡迎指正。
最后一句,菜鳥言論,僅供娛樂。
總結
以上是生活随笔為你收集整理的【转载】浅析输入法原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式之facade模式
- 下一篇: 软件设计简要