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