首页 > 范文大全 > 正文

VC中多语言主菜单的实现

开篇:润墨网以专业的文秘视角,为您筛选了一篇VC中多语言主菜单的实现范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:选用Windows操作系统为平台,Visual C++GUI为开发环境,详细介绍了软件实现多语言用户界面的基本架构以及实现步骤,最终结合Windows编程的特点提出针对多语言操作界面的语言动态切换实现提出解决方案。

关键词:用户界面;多语言;动态切换;Visual C++;Windows平台

中图分类号:TP311.52 文献标识码:A文章编号:1007-9599 (2011) 19-0000-01

Implementation of the Multi-Language Main Menu for vc

Chen Jinzhi,Tong Lu

(Xingan Vocational and Technical College, Ulanhot137400,China)

Abstract:Using the Windows operating system platform,Visual C++ GUI for the development environment,details the software implementation of multi-language user interface,the basic architecture and implementation steps,the ultimate combination of Windows programming features proposed for multi-language user interface language dynamically switch to achieve proposed solution.

Keywords:User interface;Multi-language;Dynamic switching;Visual C++;Windows platform

随着全球的文化交流越来越紧密,软件本来作为国际化的交流的工具之一,它的国际化要求是必须要达到的,无论是国内还是国外的大型软件,不但提供自国家的语言版本,还必须提供其他国家语言的支持,这样软件才能走向国际化的舞台。软件本来就是商品,他的研发必须考虑市场的接收能力是否能到预期的效果,显然一个软件只能支持本国的语言,它的市场就缩水了很大的比重,要提高软件的通用性面对的首要问题就是对软件实现多语言的即国际化的编程,借鉴很多国外软件开发的成功经验模式,实现用户操作界面的国际化,为软件成功打入国际市场打下基础。

一、软件构建思路

所有软件开发的时候必须将它的普遍性和通用性考虑进去,否则这就是个失败的软件,笔者结合多年的软件开工作中的一些经验,对软件多语言支持系统的构建做出了详细的说明,并且针对实现多语言用户界面时候遇见的一些情况提出了处理的方法,提出了灵活使用的用户界面的解决方案。利用现有软件成熟模块化编程,选择Windows 2000/XP和Visual Studio 2005为开发环境,基于MFC或WTL均可。

任何一款软件产品它和用户最直接的交通沟通都是通过用户界面来实现的,要建立一个支持多语言的用户操作界面必须了解那些元素是需要具备多语言切换功能的,可以分类如下:

(一)通常通过对句柄的遍历获取菜单、常规控件的Caption文本及窗体标题栏的资源,主要包括话框的标题栏、状态栏,Button按钮、静态Text的Caption,菜单项文本等。

(二)还有一些控件在语言文本进行切换的时候可以不用响应,而是在其在显示的时候采用动态加载的方式获取相应的语言文本资源,这类控件有弹出窗口、弹出菜单和控件的ToolTip气泡提示等。

(三)一部分控件的功能无法简单的通过句柄获取资源ID,针对这类控件就要采用多语言的切换,主要包括列表表头、图片式按钮等高级控件的内置文本。

二、实现方法

(一)保存语言支持列表的XML配置文件即保存了用户所选择的语言配置信息,在软件启动的时候会默认读取语言配置文件,如果软件第一次启动的话默认配置的语言为en-US,用户可以自己改变默认的语言配置。在软件启动加载配置文件的时候,会根据当前配置语种来设置线程语言,这个过程就是窗体初始化的时候获取语言资源的过程。

(二)假如用户想修改当前用户显示界面的目标语言配置,采取的做法是将线程设置成需要的语言即在XML配置文件中写入该语种,通过触发消息事件后完成用户界面的消息响应,实现用户界面的多语言文本的切换,这里就完成了非弹出式的用户界面的语言切换工作,另外通过动态加载来实现弹出界面的语言文本资源显示。

(三)在实现多语言用户界面显示之前的准备工作是在项目资源视图的String Table中整体完成资源文本的添加并且要按照固定的格式来操作,这就为每个窗体、空间和界面元素的多语言支持打下了基础,如果是多个窗体的处理情况,那么每个窗体必须有持的语种添加一个相应的String Table。

(四)资源文本的添加是必须需要其窗体所对应的资源ID来实现的,如果没有该窗体的资源ID窗体会加载默认的文本资源。另外可以通过自行拟定文本ID的格式的方式实现弹出窗口、ToolTip等添加资源文本的情况,需要注意的是文本资源ID标识不能和控件ID重复,下图所示为String Table的参考格式。

(五)在选择切换语言时,通过调用Win32 API函数Set Thread Locale设置线程地方语言ID,参数为LCID类型。函数原型如为Set Thread Locale(__in LCID Locale)。需要注意的是,此函数只适用于Windows NT平台。

根据MSDN的解释,Set Thread Locale会作用于Load String,而在切换语言的过程中就是通过Load String从String Table读取控件的资源文本的,因此只要响应该切换语言的消息即可自动完成多语言的切换。弹出式提示窗口的多语的切换。

(六)为了提高代码的复用度和软件的可扩展性,充分利用C++泛型编程的特性和优势,笔者在实现时,将相关语言切换的操作实现封装在一个C++模板中,由窗体类去继承该模板,并可以自行实现模板中的相关接口,从而在消息响应中调用模板中的函数实现语言切换功能。该模板的核心代码如下:

(七)首先需要在每个语言版本的String table中添加相应提示文本资源,然后在窗体类中调用。

(八)实现的最后一步,就是在窗口类中继承语言切换的模板类,设置消息映射,声明自己的消息响应函数,调用Switch Language切换接口方法,按照需要也可以添加相关自定义的语言切换实现。这些实现,都是经过抽象之后封装在模板类中,程序有了比较良好的可扩展性和通用性。

三、结论

要实现一个实用性强的多语言支持软件是一项工作量较大的任务,在设计初始的时候必须全面考虑需求,认真的考虑每一个设计细节,选择具备优势的资源开发环境来完成开发,本文着重在利用Windows消息机制编程,C++泛型的优势以及Visual C++的内置特性。

参考文献:

[1]姜湘岗,章小莉.实现软件多语言用户界面方法之分析[J].北京电子科技学院学报,2006,14(2):15-18