5, 如何根據系統語言ID號來選擇相應的皮膚: a) 每套皮膚包括一個png文件和一個gbk文件,其前綴相同,僅后綴不同。其中png文件是帶有多層圖像數據的圖片文件,gbk是含有對應png割圖信息的數據文件。用戶如果需要全英文界面,則皮膚文件將不會出現中文字符,如果還需要與中文版切換,就需要兩套皮膚。因為我們的皮膚文件格式尚未做到可以切換中英文的功能,所以只能將兩套皮膚都放在安裝目錄下,由輸入法模塊來根據變量wSystemLangIDPrimary來選擇。 b) 皮膚的屬性包括:顏色、橫\豎屏、大小、語言。 i. 大小:現有代碼對皮膚大小和橫\豎屏的處理都比較完善和智能化處理。初始化模塊會加載皮膚文件,讀取數據頭,獲取該套皮膚的寬、高,以及橫豎屏。比如屏幕是240X320的,就將安裝目錄下的所有該分辨率的皮膚加入列表(即為SkinList,包括了皮膚文件的文件名、皮膚大小等)以供選擇(獲取屏幕信息的函數GetSystemMetrics和SystemParametersInfo)。如果沒有完全匹配的皮膚,則選擇面積最相近的那一套。 ii. 橫\豎屏:同理,橫\豎屏也可以通過讀取皮膚信息和屏幕屬性對比來確定。皮膚文件已經包含了自動變換橫豎屏的信息,所以不需要針對橫豎屏作額外處理(本處內容與皮膚文件格式與解析有關,暫不贅述)。 iii. 顏色:注冊表項SkinColor的值是顏色的名稱,比如blue、black、red等,不區分大小寫。 iv. 語言:注冊表項Language的值是語言的名稱,比如English、Chinese等,不區分大小寫。 v. 系統啟動時,讀取注冊表項SkinColor和Language,拼接皮膚文件前綴,其格式為:SkinColor_Language_Size,如果SkinColor和Language的值分別是Blue和English,則皮膚文件前綴應該是Blue_English_XXX,其中XXX是大小,一般為wvga、vga、qvga等。拼接好文件前綴后,就在已經讀取的適用列表SkinList中進行匹配,找到相應的皮膚文件全名,加載之。 c) 示例: i. 啟動時,輸入法模塊先獲取系統語言ID號,如果wSystemLangIDPrimary是04,則將注冊表項Language設置為Chinese。 ii. 然后讀取SkinColor和Language,獲得最匹配的皮膚文件,根據wSystemLangIDPrimary初始化引擎為中文模式。 iii. 如果用戶想切換至純英文界面,則發送消息 PostMessage( hwnd , GB_APP_MSG , GB_APP_LANG , 09 ); 即可。 iv. 輸入法收到消息后,更改Language的值為English,設置isSkinChange為1,并隱藏輸入法界面。待下一次調出虛擬鍵盤時,將重新初始化引擎為英文模式,并加載英文皮膚,設置isSkinChange為0。這樣就完成了語言和皮膚的切換。 v. 后續如果有用戶需要輸入法提供換膚功能,則可以發送消息通知輸入法修改SkinColor表項值(Language值不變),并設置isSkinChange為1,這樣在下一次顯示界面時,就可以切換到相應的皮膚上了。