VC开发多语言界面支持的简单方法

VC开发多语言界面支持的简单方法,第1张

VC开发多语言界面支持的简单方法,第2张

最近在做一个小程序,需要多语言界面显示的支持功能,用户可以自己设置界面显示内容。

最初是用INI文件来配置显示内容,通过改变另一种语言的配置文件就可以改变整个系统的显示语言。考虑到系统规模小,周期短,我不想用太复杂的方案来解决这个问题。我在网上查阅了很多类似的设计和代码,发现并不是很满意。

主要问题是:绝大多数基于INI文件配置这种简单而到期的实现的代码都是为组件ID加载的,组件的ID号是写死的,比如:

strCaption = fileManager。GetString(section," IDC_Stc_ListStudent "," ");
SetDlgItemText(IDC _ Stc _ list student,str caption);
strCaption = fileManager。GetString(section," IDC_Stc_AllContent "," ");
SetDlgItemText(IDC _ Stc _ all content,str caption);

这样,接口组件越多,加载代码越长;对于每个新的显示窗口,必须复制粘贴类似的代码,并根据组件ID的常数值修改相关的附加组件。很是难受!

设想是:为窗口组件的标题设计一个统一通用的设置方法,在一个给定的框架或对话框等窗口容器组件中遍历所有组件,这样增减显示组件都不会影响语言包加载代码,可以达到自适应界面组件的语言包加载效果。

这就产生了一个新问题:语言包配置文件中的标题值如何正确对应相关组件?

我的朋友温国庆建议用XML文件来定义这种对应关系。这个想法触动了我:反正只是一个[Key,Value]数据,用已经实现的INI配置文件就可以了。所以一切问题都解决了!

具体设计是:语言包配置文件直接设置为组件ID和组件显示信息的哈希表,Key = Value。比如BtnOK组件的ControlID为“1003”,中文显示标题为“登录”,语言包配置内容为“1003=登录”。

语言包的加载过程分两步实施:

首先,从语言包配置文件中,将所有配置的ID和标题条目读入Vector或Array。

其次,遍历指定窗口中的所有组件时,每找到一个组件,就用其ID在加载的语言包数组中搜索,找到时用配置的值修改组件标题属性;如果找不到,则认为不需要动态配置和处理。

配置文件示例:

物品说明:版块:[登录对话框]:界面窗口;左边:窗口中需要设置标题属性的组件的ID;左边:窗口中需要设置标题属性的组件的标题值;

[登录对话框]

1001 =用户帐户

1002 =用户密码

1017 =已记录

1018 =退出

语言包信息加载代码:

BOOL CLanguageManager::loadFromFile()
...{
BOOL bRead=FALSE;
int i;
ItemContext temp;
CStringArray itemBuf,valueBuf;
bRead = fileManager.GetSectionValues("Main Window",itemBuf,valueBuf);
if(bRead)
...{
for(i=0;i

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » VC开发多语言界面支持的简单方法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情