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