直播中
名稱 | 功能 |
Agfa字體壓縮 | 支持字體壓縮 |
字體版本 | 因?yàn)闁|亞字體占據(jù)內(nèi)存較大,此組件提供了用于選擇不同大小字體文件的選項(xiàng) |
手寫識(shí)別 | 手寫識(shí)別引擎 |
多語(yǔ)言用戶界面 | 提供給最終用戶用于切換語(yǔ)言種類 |
National Language System | 國(guó)家語(yǔ)言支持(包括日期、時(shí)間、數(shù)字、貨幣格式) |
Transcriber應(yīng)用程序 | 識(shí)別英語(yǔ)、法語(yǔ)、德語(yǔ)的手寫識(shí)別程序 |
Unicode碼支持 | 能夠處理和顯示Unicode碼 |
日語(yǔ)IME | 日語(yǔ)輸入法編輯器 |
韓語(yǔ)IME | 韓語(yǔ)輸入法編輯器 |
簡(jiǎn)體中文IME | 簡(jiǎn)體中文輸入法編輯器 |
Shuang Pin IM | 簡(jiǎn)體中文雙拼輸入法 |
GB18030 轉(zhuǎn)換器 | 在GB18030到CE編碼之間的轉(zhuǎn)換 |
繁體中文IME | 繁體中文輸入法編輯器 |
在定制內(nèi)核的時(shí)候常會(huì)遇到這些組件,尤其是字體版本,選擇不同的字體對(duì)于整個(gè)內(nèi)核的大小影響很大。在定制內(nèi)核的時(shí)候,選擇PB提供的字體版本應(yīng)該參照標(biāo)題為"Font Versions"的幫助文檔,在這個(gè)文檔中詳細(xì)的列舉了東亞語(yǔ)言字體的文件名稱、內(nèi)容、正常大小和壓縮大小。除了選擇合適的字體版本外,還應(yīng)該采用Agfa字體壓縮技術(shù),Agfa字體壓縮技術(shù)的優(yōu)點(diǎn)是能夠減小字體占用的ROM和RAM空間,另外能夠保證在壓縮和解壓縮后數(shù)據(jù)不丟失。如果采用字體壓縮,Agfa壓縮技術(shù)將字體壓縮成TrueType格式,并另存為擴(kuò)展名為".ac3"的文件,那么CE在使用字體的時(shí)候首先尋找擴(kuò)展名為".ac3"的文件。如果不采用字體壓縮,CE將使用非壓縮字體,如擴(kuò)展名為".ttf"".ttc"的文件。下面講述關(guān)于簡(jiǎn)體中文輸入法編輯器的相關(guān)知識(shí)。
CE的輸入法系統(tǒng)由下列幾個(gè)部分組成:
輸入法系統(tǒng)的工作機(jī)制如下:
當(dāng)輸入法系統(tǒng)啟動(dòng)后,用戶按鍵盤,鍵盤消息被IMM發(fā)送到IME。IME處理消息內(nèi)容,根據(jù)鍵盤消息的內(nèi)容或者產(chǎn)生用于寫作的字符,或者產(chǎn)生命令。當(dāng)IME處理鍵盤消息后,它發(fā)送通知消息到當(dāng)前獲得焦點(diǎn)的窗口,如果這個(gè)窗口不能處理IME通知消息,那么通知消息被發(fā)送到IME控制窗口,控制窗口將消息返回到IME,IME做默認(rèn)的處理工作(IME提供了完整的用戶接口)。對(duì)于能夠處理IME通知消息的窗口,被稱之為IME-aware窗口,相反不能處理IME通知消息的窗口,被成為IME-unaware窗口。能夠處理IME通知消息的窗口通過IMM 函數(shù)能夠?qū)崿F(xiàn)自定義的輸入法編輯器。
輸入上下文:
輸入上下文存儲(chǔ)了IME的狀態(tài)信息,它是IME的內(nèi)部結(jié)構(gòu)。對(duì)于每一個(gè)線程,系統(tǒng)創(chuàng)建和分配了一個(gè)默認(rèn)的輸入上下文,在線程內(nèi)的每個(gè)窗口都共享輸入上下文的內(nèi)容。具體輸入上下文的結(jié)構(gòu)體定義包含在標(biāo)題為"INPUTCONTEXT"的幫助文檔中。從文檔中看出,輸入上下文包含對(duì)應(yīng)窗口句柄、寫作窗口和候選窗口和狀態(tài)窗口的位置、字體、消息緩沖區(qū)等等。用函數(shù)ImmGetContext可以得到指定窗口對(duì)應(yīng)的輸入上下文的句柄。用ImmReleaseContext釋放指定的輸入上下文。如果不希望一個(gè)線程內(nèi)的窗口都共享同一個(gè)輸入上下文,那么可以調(diào)用函數(shù)ImmCreateContext來創(chuàng)建一個(gè)新的上下文,并調(diào)用函數(shù)ImmAssociateContext將新創(chuàng)建的輸入上下文與指定的窗口關(guān)聯(lián)。當(dāng)不用這個(gè)新創(chuàng)建的上下文時(shí),調(diào)用ImmDestroyContext來釋放內(nèi)存。調(diào)用函數(shù)ImmLockIMC能夠得到一個(gè)指定的輸入上下文的指針,通過這個(gè)指針可以訪問輸入上下文的數(shù)據(jù)。訪問結(jié)束后調(diào)用函數(shù)ImmUnlockIMC,ImmUnlockIMC減少計(jì)算鎖數(shù)量,直到釋放句柄。關(guān)于輸入上下文的例子代碼如下:
HIMC hIMC = ImmCreateContext(); ///創(chuàng)建新的上下文 LPINPUTCONTEXT lpIC; lpIC = ImmLockIMC(hIMC); .................... ///使用lpIC訪問上下文數(shù)據(jù) ImmUnlockIMC(lpIC); ImmAssociateContext(hWnd, hIMC); ///與窗口關(guān)聯(lián) ImmDestroyContext(hIMC); ///最后釋放上下文下面是調(diào)用中文輸入法的例子代碼:
HIMC hIMC = ImmGetContext(hWnd); ///hWnd為當(dāng)前窗口句柄 POINT pt; pt.x = 300; pt.y = 200; ImmSetStatusWindowPos(hIMC, &pt); ///設(shè)置狀態(tài)窗口位置 ImmSetOpenStatus(hIMC, TRUE); ///打開中文輸入法 ImmReleaseContext(hEdit, hIMC); ///最后釋放上下文我在開發(fā)過程中發(fā)現(xiàn)并非所有Imm函數(shù)都有效,通過對(duì)Pocket IME源碼分析后證實(shí)了我的發(fā)現(xiàn)。但上述的函數(shù)都能夠?qū)崿F(xiàn)功能,對(duì)于只要能夠打開并使用中文輸入法的要求還是可以滿足的。