在VC 5.0中实现基于MFC的组件的本地化

原创 2001年02月05日 10:16:00
发信人: cvisual (贝贝), 信区: VisualC 
标  题: 在VC 5.0中实现基于MFC的组件的本地化 
发信站: BBS 水木清华站 (Thu May  7 23:08:34 1998) 
 
   Visual C++(以下简称VC)是微软公司的Visual 系列软件开发工具 
之一。对非英语地区的程序员,不可避免地要解决软件的本地化问题 
。VC 本身就支持多语种编程,给本地化带来了极大的方便。这里我们 
主要讨论基于 MFC 的组件的本地化。 
    要实现那些使用 MFC 的组件的本地化,需要解决下面两个问题。 
    组件本身的本地化 
    第一问题是,要实现组件本身的一些特殊资源的本地化,例如字符 
串、对话框等等。由于大多数在 MFC 基础上构架的组件也包含和使 
用了一部分由 MFC 定义的资源,所以必须同时本地化这些 MFC 资源 
。幸运的是,MFC 本身已提供了多种语言的本地化版本,它们包括:汉 
语、德语、西班牙语、法语、意大利语、日语和韩国语。存在于VC光 
盘中相应的 /DevStudi/ VC/MFC/[src|include]/l.xxx/ 目录下," l 
 "代表"本地化"的意思,"l.chs"即代表简体中文。将这些目录下的 * 
.rc 文件拷入硬盘中相应的目录即可。当应用程序与MFC之间采用静 
态链接的模式时应采用该方法,但它只在VC 5.0的专业版与企业版中 
才支持。 
    大多数的应用程序与MFC之间采用动态链接的方式,这时在Win95 
的system目录下必须有相应的MFC 资源 DLL 文件的本地版本——MFC 
4xLOC.DLL(Pwin95 OEMSR2版本提供的是MFC0 LOC.DLL)。将VC光盘的 
目录 /DevStudio/VC/Redist 中的文件:MFC42xxx.DLL 拷贝入Pwi95 
的system目录下,并更名为:MFC42LOC.DLL即可(其中MFC42CHS.DLL即 
代表简体中文版的资源 DLL 文件)。拷入前除了要解决同名DLL相覆 
盖的版本问题外,还应注意以下两方面的内容 
    首先,不应该在英文版的系统(如英文 Win95)上安装 MFC4xLOC.D 
LL。因为英文版的资源文件代码已内建于MFC4x.DLL 中,应用程序从M 
FC4x.DLL 中载入代码的速度比从 MFC4XLOCD LL 中先搜寻再载入代 
码的速度要快得多。 
    其次,由于有多个版本的 MFC4xLOC.DLL ,在VC光盘的目录 /DevS 
tudio/VC/Redist 中可同时找到如:MFC4xCHS.DLL——简体中文版本 
、MFC4xDEU.DLL——德国版本、MFC4xESP.LL——意大利版本等等。 
    所以在安装之前,应先确定所安装的MFC4xLOC.DLL 的本地版本代 
号与所使用的Window 系统是否相一致,例如:只有MFC42CHS.DLL 才能 
安装在 Pwin95 的系统上。 
    需要指出的是,以上的方法会给应用程序的安装带来一定的复杂 
性,因为用户的系统下可能会安装多种本地化版本的应用程序。例如: 
支持简体中文;后来又装了一个日文版的软件而链接库文件MFC4xLOC. 
DLL 只有一个,若后者覆盖了前者,应用程序运行时就会发生资源链接 
出错。所以我们建议采用另一种方法,即建立自己的本地版本的MFC 
资源 DLL 文件,而不是直接调用MFC4xLOC.DLL 文件,该方法后面会继 
续分析。 
    处理代码 
    第二个问题是,应处理好各组件本地化资源的代码,使之能良好地 
运行于目标环境。大多数情况下,这依赖于应用程序对字节的高位及 
双字节字符的处理能力。在缺省情况下,MFC对它们直接支持。 
    所以,本地化应用程序和DLL实质上只需用本地语言改写相应的资 
源即可。如果C++源代码中不带有需要本地化的字符串或正文,那么只 
需对资源文件作修改。实际上,用户可以实现自己的组件,这样无须重 
建原始代码即可获得本地版本。这或许很复杂,但很值得,MFC本身也 
采用这种技术。可打开资源文件编辑器直接用本地语言进行编辑,但 
这样每次版本的升级都需对应用程序进行重建。 
    注意:VC 4.0或以后的版本直接支持多种语言的.RC文件。 
    避免这样做的一种方法就是建立一个分离的DLL并对其进行本地 
化,该 DLL 有时也叫做"卫星式 DLL"。在程序运行期间它将被动态地 
进行链接,此时资源将从这个"卫星式 DLL"载入,而不是从代码的主模 
块载入。MFC 直接支持这种方法,MFC4xLOC.DLL 本身就是一个本地化 
的"卫星式 DLL",只不过是在缺省状况下是由 MFC 提供的。我们可以 
建立一个自己的"卫星式 DLL",如有一名为MYAPP.EXE 的应用程序,它 
的所有资源全来源于一个叫做 MYRES.DL 的文件。这些都在其应用程 
序的InitInstance 事件中完成,如下所示: 
    CMyApp::InitInstance() 
    { 
      // 初始化代码的开始部分 
      HINSTANCE hInst = LoadLibrary("myres.dll"); 
      if (hInst != NULL) 
        AfxSetResourceHandle(hInst); 
        // 以下是其它初始化代码 
      . 
      . 
      . 
    } 
    这段代码执行后,MFC 将从 MYRES.DLL 中载入资源,而不是直接 
从 MYAPP.EXE 中载入。 
    建立一个单一的资源DLL文件并不难。先建立一个 DLL 项目文件 
,并加入.RC文件和其他必要的资源,然后在链接器(Linker)的参数里 
增加一个 "/NOENTRY"参数即可。这个参数告诉链接器该 DLL 没有接 
入点,因为资源 DLL 文件没有代码。 
    另外,若应用程序以 Win32 Release 的方式建立(即EXE 文件中 
不嵌入调试代码),则还需完成以下步骤。在工程文件里,打开菜单 Pr 
ojects/settings... ,分别选中c/c++ 页和R esources页,将其中的 
参数[ /D "_AFXDLL"]去掉(它一般由 AppWizard 自动生成)。该参数 
指定只从 MFC 的共享 DLL 文件中载入资源,而并不定义其他的资源 
来源,这样用户自己建立的资源 DLL 文件将不起作用。 
 最后,由于AppWizard 是VC++的一大特色,VC++ 允许在使用AppWi 
zard 创建基于MFC的应用程序框架时就可以选择不同的语言,直接生 
成本地化的程序框架。其中日文、韩文与简体中文,由于需要支持双 
字节版本的操作系统,所以在缺省情况下,与这三种远东语言相对应的 
MFC AppWizard DLLs并没有被VC 5.0的安装程序装入硬盘。因此,在 
应用程序生成向导的第一页下拉式列表框中,找不到这些语言条目,但 
可以在VC光盘的 /DevStudio/SharedIDE/Bi/ IDE 目录中找到: 
    语言                AppWizard DLL 
    ----------------------------------- 
    日文        ----    APPWZJPN.DLL 
    韩文        ----    APPWZKOR.DLL 
    简体中文    ----    APPWZCHS.DLL 
    在简体中文Pwin95下,只需将相应的APPWZCHS.DLL 文件从VC光盘 
拷贝入硬盘的 /DevSu dio/SharedIDE/Bin/IDE 目录下即可。这时," 
简体中文"这一条目就会出现在应用程序生成向导的第一页下拉式列 
表框中,如下图: 
图1 
    这样,AppWizard 生成的应用程序框架将自动包含简体中文的菜 
单、标题、状态栏等。我们将框架程序编译链接,运行后将会看到一 
个漂亮的全中文界面。 
    所以,用VC制作简体中文的软件非常方便,感兴趣的朋友可以继续 
查看VC帮助系统,以获得更多的信息。 
 
-- 
┌————┐ 
│ 贝  贝 │  
└————┘  
              
 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: bbs.nju.edu.cn] 

在VC 5.0中实现基于MFC的组件的本地化

2001年02月05日 10:16:00 发信人: cvisual (贝贝), 信区: VisualC 标 题: 在VC 5.0中实现基于MFC的组件的本地化 发信站: BBS 水木清华站 ...
  • softart
  • softart
  • 2007年10月27日 07:50
  • 321

用VC在局域网实现IP多播通信

在局域网中,管理员常常需要将某条信息发送给一组用户。如果使用一对一的发送方法,虽然是可行的,但是过于麻烦,也常会出现漏发、错发。为了更有效的解决这种组通信问题,出现了一种多播技术(也常称为组播通信),...
  • Mobidogs
  • Mobidogs
  • 2007年01月18日 11:56
  • 1748

最简单的在VC中用MFC中FTP下载功能的实现

(1)、确定一个FTP服务器,这里假设本地主机。(2)、新建一个基于对话框的应用程序,在对话框的源文件中引用“afxinet.h”源文件。(3)、在对话框的OnInitDialog方法中链接指定的FT...
  • chengweipeng123
  • chengweipeng123
  • 2010年01月23日 10:28
  • 8431

MFC实现播放视频的几种方式

因为涉及到播放视频,所以找了一下通用的几种。 1.ActiveX  Windows Media Player控件 可以支持各种有损无损的视频格式,可扩展性也比较强,还是不错的。 这位...
  • artemisrj
  • artemisrj
  • 2013年04月28日 17:06
  • 5682

COM组件开发(四)——VC++调用COM组件的方法

ActiveX 控件          对于ActiveX控件,可以在Visual Studio中使用ClassWizard的方法引入,在MFC项目中选择菜单“项目”——> “添加类”——>“Acti...
  • q5806622
  • q5806622
  • 2015年02月16日 15:15
  • 8485

用VC6.0建立MFC工程,建立对话框和简单的实现跳转

对话框的新建及跳转 点击File->New->Project->MFC AppWizard(exe)填写好路径和工程名称 选择dialog based。点击Finish。就新建好了。   右键...
  • liangyong_hui
  • liangyong_hui
  • 2016年06月30日 23:57
  • 3080

基于MFC的VC++仿QQ浏览器源码(雏形)

这只是一个只开了头的源码,基于MFC模仿QQ浏览器5源码(雏形),类似DirectUI方式,无子控件。 ResSkin1.png为分层图片源码,可以用Fireworks打开编辑。 现在浏览器已经很多了...
  • CometNet
  • CometNet
  • 2011年06月10日 00:18
  • 15108

vc--基于mfc的上位机设计(一)

经过这两天的调试,基本上搞定了dsp和上位机界面,先记录下我的上位机。        实验室是做机器人控制的,经常会用到上位机,我只搞过简单的上位机的编写,是基于mfc的对话框的,很多原理性的东西现在...
  • xzyfeixiang
  • xzyfeixiang
  • 2013年11月24日 11:31
  • 5670

VC利用Socket实现FTP

////////////////////////////////////////////////////////////////////////////////////////////////////...
  • sqysqy123456
  • sqysqy123456
  • 2014年01月22日 16:00
  • 564

基于MFC的简易的Windows播放器

基于MFC的简易的Windows播放器,实现简单的音频视频的播放功能。利用AppWizard创建MFC(exe)创建SDI应用程序,项目文件名为MediaPlayer。    在MFC应用...
  • Sayesan
  • Sayesan
  • 2015年09月16日 16:15
  • 2189
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在VC 5.0中实现基于MFC的组件的本地化
举报原因:
原因补充:

(最多只允许输入30个字)