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,这样在下一次显示界面时,就可以切换到相应的皮肤上了。