漫谈WinCE输入法的编写(四)
生活随笔
收集整理的這篇文章主要介紹了
漫谈WinCE输入法的编写(四)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
//========================================================================
//TITLE:
//??? 漫談WinCE輸入法的編寫(四)
//AUTHOR:
//??? norains
//DATE:
//??? Tuesday? 27-March -2007
//Environment:
//??? ??? EVC4.0 + Standard SDK
//========================================================================
??? ???
??? ??? 好的,我們最后來看看編寫輸入法需要注意的一些細節.
1.如何發送字符??? ???
??? ??? 如果按之前的文章保存好回調函數,那么發送字符則是非常簡單的事情.
??? ???
??? ??? 例如,我們向應用程序發送一個字符":",只需如此:
??? ??? ?m_pIMCallback->SendString(TEXT(":"),1);
??? ???
??? ??? 如果想發送鍵盤消息,則可以調用這兩個個函數:SendCharEvents(),SendVirtualKey();
??? ???
??? ??? 因為這三個個函數在文檔中都有詳細介紹,使用也并無多大困難,在此略為不表.
??? ???
2.如何使輸入法正常工作
??? ??? 輸入法編寫完畢后如果僅僅只是將其包含至系統之后(如何將文件包含到系統請見我之前的文章),并不能讓輸入法正常工作.如果想要輸入法正常運作,尚需要更改注冊表.
??? ??? ??? ???
??? ??? 下面注冊表內容舉個例子:
[HKEY_CLASSES_ROOTCLSID...{42429999-ae04-11d0-a4f8-00aa00a749b9}]
????@="輸入法"
????"KBMode"=dword:5
[HKEY_CLASSES_ROOTCLSID...{42429999-ae04-11d0-a4f8-00aa00a749b9}DefaultIcon]
????@="/windows/MyInputMethod.dll,0"
[HKEY_CLASSES_ROOTCLSID...{42429999-ae04-11d0-a4f8-00aa00a749b9}InprocServer32]
????@="/windows/MyInputMethod.dll"
[HKEY_CLASSES_ROOTCLSID...{42429999-ae04-11d0-a4f8-00aa00a749b9}IsSIPInputMethod]
????@="1"
???
??? ??? 我們來看看注冊表的具體內容代表的含義:
??? ??? {42429999-ae04-11d0-a4f8-00aa00a749b9}:微軟唯一識別ID字符,據說可以通過某些軟件生成,但我沒找到^_^.
??? ??? "輸入法":在輸入法管理器界面中顯示的標題.
??? ??? "//windows//MyInputMethod.dll":我們編寫的輸入法的動態鏈接庫名和所處的路徑.
??? ???
??? ??? 一般來說,只要更改以上三項,就能達到個性化輸入法的目的.將該注冊表鍵值包含至PB的工程目錄,系統生成完畢之后,輸入法便可正常運作.
??? ???
??? ???
??? ???
3.如何方便調試輸入法
??? ??? 因為輸入法要包含到系統中才能正常運作,所以在一般流程上,應該是在PB中建立輸入法工程,然后添加特性,接著是編譯系統,最后是下載到目標機中進行調試.即使是改動很小,也需要照此步驟走一遍,麻煩瑣屑不說,時間上的浪費也讓人煩躁.
??? ???
??? ??? 如果輸入法的編寫是按照之前文章所說的結構,那么調試的話則會非常方便.只要將創建的子窗口的代碼改為創建主窗口即可:
? ???????????????m_hWnd?=?CreateWindowEx(0,
????????????????????????WINDOW_CLASS,
????????????????????????WINDOW_TITLE,
????????????????????????WS_POPUP?|?WS_BORDER?,
????????????????????????0,
????????????????????????0,
????????????????????????IMG_IMWND_WIDTH,//rcWnd.right?-?rcWnd.left,
????????????????????????IMG_IMWND_HEIGHT,//rcWnd.bottom?-?rcWnd.top,
????????????????????????NULL,
????????????????????????NULL,
????????????????????????m_hInst,
????????????????????????NULL
????????????????????????);
??? ???
??? ??? 我們所需要做的,就是像普通應用程序一樣對創建的窗口進行調試.唯一和輸入法管理器調用不同的是,我們無法測試字符的發送.但這點,相對于整個代碼來說,僅僅是很小一部分而已;何況,只要留意本章的第一點所提及的關鍵點,也并不會顯得困難了.
4.輸入法崩潰的可能原因
??? ??? 有時候明明代碼沒有問題,但只要一調用輸入法管理器,選擇我們所需的輸入法,程序就會崩潰.特別是,輸入法用到兩個類,并且這兩個類是互相獨立,如果其中一個類調用另一個類的,那么很容易地,就會發生崩潰.
??? ???
??? ??? 解決方法有其二,之一是:如果有兩個以上的類,那么將其它所有的類的聲明和定義包含于主類中,相當于主類里再聲明子類.好處是大小不會變更,壞處嘛,自然也是顯而易見----因為是多個類交雜在一起,顯得非常的混亂.
??? ??? 方法之二,則只要更改編譯器選項,讓其不優化即可.
??? ???
??? ??? 如圖:
??? ???
??? ??? 好處是不用更改源代碼結構,使得代碼清晰明了;壞處是,DLL的體積會有所增加.
//TITLE:
//??? 漫談WinCE輸入法的編寫(四)
//AUTHOR:
//??? norains
//DATE:
//??? Tuesday? 27-March -2007
//Environment:
//??? ??? EVC4.0 + Standard SDK
//========================================================================
??? ???
??? ??? 好的,我們最后來看看編寫輸入法需要注意的一些細節.
1.如何發送字符??? ???
??? ??? 如果按之前的文章保存好回調函數,那么發送字符則是非常簡單的事情.
??? ???
??? ??? 例如,我們向應用程序發送一個字符":",只需如此:
??? ??? ?m_pIMCallback->SendString(TEXT(":"),1);
??? ???
??? ??? 如果想發送鍵盤消息,則可以調用這兩個個函數:SendCharEvents(),SendVirtualKey();
??? ???
??? ??? 因為這三個個函數在文檔中都有詳細介紹,使用也并無多大困難,在此略為不表.
??? ???
2.如何使輸入法正常工作
??? ??? 輸入法編寫完畢后如果僅僅只是將其包含至系統之后(如何將文件包含到系統請見我之前的文章),并不能讓輸入法正常工作.如果想要輸入法正常運作,尚需要更改注冊表.
??? ??? ??? ???
??? ??? 下面注冊表內容舉個例子:
[HKEY_CLASSES_ROOTCLSID...{42429999-ae04-11d0-a4f8-00aa00a749b9}]
????@="輸入法"
????"KBMode"=dword:5
[HKEY_CLASSES_ROOTCLSID...{42429999-ae04-11d0-a4f8-00aa00a749b9}DefaultIcon]
????@="/windows/MyInputMethod.dll,0"
[HKEY_CLASSES_ROOTCLSID...{42429999-ae04-11d0-a4f8-00aa00a749b9}InprocServer32]
????@="/windows/MyInputMethod.dll"
[HKEY_CLASSES_ROOTCLSID...{42429999-ae04-11d0-a4f8-00aa00a749b9}IsSIPInputMethod]
????@="1"
???
??? ??? 我們來看看注冊表的具體內容代表的含義:
??? ??? {42429999-ae04-11d0-a4f8-00aa00a749b9}:微軟唯一識別ID字符,據說可以通過某些軟件生成,但我沒找到^_^.
??? ??? "輸入法":在輸入法管理器界面中顯示的標題.
??? ??? "//windows//MyInputMethod.dll":我們編寫的輸入法的動態鏈接庫名和所處的路徑.
??? ???
??? ??? 一般來說,只要更改以上三項,就能達到個性化輸入法的目的.將該注冊表鍵值包含至PB的工程目錄,系統生成完畢之后,輸入法便可正常運作.
??? ???
??? ???
??? ???
3.如何方便調試輸入法
??? ??? 因為輸入法要包含到系統中才能正常運作,所以在一般流程上,應該是在PB中建立輸入法工程,然后添加特性,接著是編譯系統,最后是下載到目標機中進行調試.即使是改動很小,也需要照此步驟走一遍,麻煩瑣屑不說,時間上的浪費也讓人煩躁.
??? ???
??? ??? 如果輸入法的編寫是按照之前文章所說的結構,那么調試的話則會非常方便.只要將創建的子窗口的代碼改為創建主窗口即可:
? ???????????????m_hWnd?=?CreateWindowEx(0,
????????????????????????WINDOW_CLASS,
????????????????????????WINDOW_TITLE,
????????????????????????WS_POPUP?|?WS_BORDER?,
????????????????????????0,
????????????????????????0,
????????????????????????IMG_IMWND_WIDTH,//rcWnd.right?-?rcWnd.left,
????????????????????????IMG_IMWND_HEIGHT,//rcWnd.bottom?-?rcWnd.top,
????????????????????????NULL,
????????????????????????NULL,
????????????????????????m_hInst,
????????????????????????NULL
????????????????????????);
??? ???
??? ??? 我們所需要做的,就是像普通應用程序一樣對創建的窗口進行調試.唯一和輸入法管理器調用不同的是,我們無法測試字符的發送.但這點,相對于整個代碼來說,僅僅是很小一部分而已;何況,只要留意本章的第一點所提及的關鍵點,也并不會顯得困難了.
4.輸入法崩潰的可能原因
??? ??? 有時候明明代碼沒有問題,但只要一調用輸入法管理器,選擇我們所需的輸入法,程序就會崩潰.特別是,輸入法用到兩個類,并且這兩個類是互相獨立,如果其中一個類調用另一個類的,那么很容易地,就會發生崩潰.
??? ???
??? ??? 解決方法有其二,之一是:如果有兩個以上的類,那么將其它所有的類的聲明和定義包含于主類中,相當于主類里再聲明子類.好處是大小不會變更,壞處嘛,自然也是顯而易見----因為是多個類交雜在一起,顯得非常的混亂.
??? ??? 方法之二,則只要更改編譯器選項,讓其不優化即可.
??? ???
??? ??? 如圖:
??? ???
??? ??? 好處是不用更改源代碼結構,使得代碼清晰明了;壞處是,DLL的體積會有所增加.
轉載于:https://www.cnblogs.com/wodeyitian/archive/2007/04/02/2460506.html
總結
以上是生活随笔為你收集整理的漫谈WinCE输入法的编写(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 威金病毒、维金病毒、Viking、log
- 下一篇: 为什么大多Virtual Globe程序