Windows 95輸入法編輯器(IME)
原著:Microsoft
翻譯:TBsoft Software Studio
一、關於Windows 95混合語言IME
在Windows 95中,IME是一個動態鏈接庫(DLL),與Windows 3.1遠東版本IME不同的是,每一個運行的IME相當於混合語言鍵盤布局中的一種。與Windows 3.1 IME相比較,Windows 95混合語言IME提供下列增強功能:
●運行時相當於混合語言環境的一個部件
●為每一個應用程序任務提供多重輸入上下文
●為每一個應用程序線程提供一個活動的IME
●通過應用程序消息循環給應用程序提供信息(消息順序不能改變)
●為無IME支持應用程序和部分IME支持應用程序提供有力的支持
要得到全部的增強功能,應用程序需要支持Windows 95 IME應用程序I/F。
本文檔描述了Windows 95 IME體系結構的應用程序I/F。
1、IME的結構
Windows 95 IME必須提供兩個部件:IME轉換接口和IME用戶接口。IME轉換接口由一組IME模塊引出函數提供,這些函數被IMM(輸入法管理器——譯者注)調用。
IME用戶接口由一組窗口提供,這些窗口接收消息並提供IME的用戶界面。
2、IME支持應用程序(IME感知應用程序——譯者注)
應用程序有下列類型:
●無IME支持應用程序:這種應用程序不控制IME,然而,如果應用程序接受DBCS字符,用戶可以通過IME在應用程序中輸入DBCS字符。
●部分IME支持應用程序:這種應用程序只控制不同的IME上下文,例如打開和關閉IME、寫作窗口等等,但是不重新顯示任何IME用戶界面。
●完全IME支持應用程序:這種應用程序負責管理通過IME顯示給應用程序的任何信息。
在Windows 95中,一個無IME支持應用程序有一個缺省的IME窗口和一個缺省的輸入上下文。
部分IME支持應用程序使用預定義的“IME”類創建自己的IME窗口,可以管理或者不管理自己的輸入上下文。
完全IME支持應用程序自己管理輸入上下文,顯示輸入上下文給出的任何需要的信息,不使用IME窗口。
二、IME用戶界面
IME用戶界面包括IME窗口、用戶界面(UI)窗口以及UI窗口的部件。
1、特征
IME類是實現IME用戶界面部分的預定義全局窗口類。“IME”類與預定義的公共控制窗口類有許多相同的特點,IME窗口實例與靜態控制一樣通過CreateWindowEx函數創建,IME類窗口自己不響應用戶輸入,取而代之的是接收不同類型的控制消息實現全部IME用戶接口。應用程序可以使用IME類創建自己的IME窗口,還可以使用ImmGetDefaultIMEWnd函數獲取缺省IME窗口。創建自己的IME窗口或者使用缺省IME窗口的應用程序被稱為IME支持應用程序,具有以下優點(與對應的Windows3.1應用程序比較):
●包括候選字列表窗口(候選窗口),每一個應用程序可以有自己的用戶界面窗口實例,使得用戶可以在任何輸入過程的中途停止並切換到另一個應用程序。在Windows 3.1日文版本中,用戶切換到另一個應用程序是必須放棄當前輸入過程。
●因為IME用戶界面窗口包括應用程序窗口句柄,IME用戶界面窗口可以為應用程序提供缺省行為。例如當應用程序移動時IME用戶界面窗口自動移動,自動跟隨窗口中的插入符號位置,為每一個應用程序標示模式等等。
即使系統僅僅只提供一個IME類,IME窗口仍然有兩種類型。一種類型是系統為無IME支持應用程序創建的IME窗口,DefWindowProc函數為該窗口處理消息,DefWindowProc函數的IME用戶接口被線程的所有無IME支持窗口共享,在文檔中,這種窗口稱為缺省IME窗口。另一種類型是IME支持應用程序創建的IME窗口,在文檔中,IME支持應用程序創建的IME窗口稱作應用程序IME窗口。
2、缺省和應用程序IME窗口
當線程初始化時系統創建缺省IME窗口,這就是說,線程自動獲取缺省IME窗口。缺省IME窗口為無IME支持應用程序提供IME用戶界面,當IME或者IMM生成一個IME消息(WM_IME_*)時,無IME支持應用程序傳遞該消息到DefWindowProc函數,DefWindowProc函數發送需要的消息到為應用程序提供缺省IME用戶界面的缺省IME窗口。IME支持應用程序當不從IME獲取消息時也可以使用缺省IME窗口,需要時可以使用自身的IME窗口。
3、IME類
IME類是Windows 95遠東版本預定義的窗口類,就像Edit是預定義的窗口類一樣。預定義的IME類實現全部的IME用戶接口,處理所有來自IME和包含IMM函數的應用程序的消息,應用程序使用IME類創建自己的IME窗口。系統IME類不能被被任何IME替換。
窗口過程與IME類通過WM_IME_SELECT消息交互,該消息包括新選中的IME的鍵盤布局,IME類使用鍵盤布局查找到每一個IME定義的類名。使用類名,IME類為當前活動的IME創建IME用戶界面窗口。