zoukankan      html  css  js  c++  java
  • MFC多国语言——配置文件

      前段时间,因工作需要,本地化了一个英文版本的产品。

      在网上查阅了若干资料,在此进行一个简单的整理。

      在MFC程序中,实现多国语言的方式很多,我们选择的是使用配置文件的方法。

      在通过配置文件方式实现多国语言功能时,主要的工作是:

      1、将需要在界面上显示的文字保存到文件中。

      2、在使用这些资源时,不是从rc文件中获取,而是从文件中加载,动态显示。

      在配置文件中,需要保存各个资源的ID、各语言版本字符串的值。需要某个资源时,通过其ID查找到资源所在节点,获取相应语言的字符串值。

      有一个问题是需要考虑的,资源的ID都是UINT类型的,如果在配置文件中以UINT类型的数值作为节点的ID,标识一个资源的话,不容易维护。

      为解决这个问题, 我们可以借鉴.h文件中的做法。在.h文件中,为了易于维护,为每个UINT类型的ID都定义了相应的宏,例如:#define IDS_DATA    1001,而在rc文件中对该资源的定义为:IDS_DATA        "Data"。这样,在程序中使用时只用IDS_DATA来代表"Data"。

      在配置文件中,可以借鉴此做法。用一个XML文件来定义IDS_DATA与1001的对应关系;用另外一个文件来定义IDS_DATA与"Data"的对应关系。而维护资源的内容时,只需要修改资源内容的XML文件。

      MFC程序中,主要有三种资源:Menu、Dialog、String。要根据每种资源的特点,来设计相应的方式保存这些资源的文字内容,便于根据资源ID获取相应的文字内容。

      可以为每种资源封装一个公共方法,动态显示该资源的文本内容。

    Menu

      对Menu类的资源,可以封装一个公共函数,遍历Menu中的所有Item,为每个Item设置显示的文字。

      如何从配置文件中获取Menu Item相应的字符串呢?需要根据配置文件的结构封装相应的方法。

      在遍历菜单,设置各菜单项文字内容的过程中,需要的主要方法如下。

      对于Popup Menu,设置Menu Text的方法:

      ModifyMenu(hMenu, i, MF_BYPOSITION, i, menuStr);

      对于String Menu,设置Menu Text的方法:

      ModifyMenu(hMenu, nMenuID, MF_BYCOMMAND, nMenuID, menuStr);

      获取菜单子菜单的方法:

      HMENU hSubMenu = GetSubMenu(hMenu,i);

    Dialog

      对于Dialog类的资源,可以封装一个公共函数,遍历Dialog内的所有控件,为每个控件设置显示的文字内容。当然,还要设置Dialog的标题。

      获取各控件字符串的方法需要根据Dialog资源配置文件的组织方式来订。

      遍历Dialog,设置各控件文字内容时,需要用到的主要方法如下。

      设置Dialog标题的方法:

      ::SetWindowText(hWnd,caption);

      获取Dialog第一个子控件的方法:

      HWND hSubWnd = GetWindow(hWnd,GW_CHILD);

      获取Dialog子控件下一个控件的方法:

      hSubWnd = GetWindow(hSubWnd,GW_HWNDNEXT);

      利用以上两个方法,可以遍历Dialog中的所有控件。

      判断子控件是否为Window的方法:

      ::IsWindow(hSubWnd)

      通过以上判断,可以获知遍历是否完成。

    String

      对于String类的资源,配置文件结构很简单,只需要保存资源ID和各个语言版本对应的字符串值即可。

      可以封装一个公共方法,根据ID从配置文件中获取字符串的值。

      使用字符串资源的方式很多,例如:错误提示信息、Status Bar显示信息、ToolTip等等。主要的是,根据各种使用场合,如何修改相关代码,改为利用公共方法,从配置文件中读取字符串资源。

  • 相关阅读:
    PyQt(Python+Qt)学习随笔:QMdiArea多文档界面区域的viewMode、documentMode、tabsClosable、tabPosition等属性介绍
    书籍收藏
    通用经验:大企业如何逆势而上
    T 恤
    柳传志:做企业家还是政治家
    管理最大的挑战是怎么激活人,尤其是激发年轻人
    张瑞敏:企业要长“第三只眼”
    软件就是未来:工业4.0时代下的工业软件
    软件:工业的未来
    poj 3422 Kaka's Matrix Travels 费用流
  • 原文地址:https://www.cnblogs.com/xiaoyusmile/p/3557554.html
Copyright © 2011-2022 走看看