MUI程序(vista以上)

A) 改造现有Project:

另一篇文章,How to Support MUI (Multi User Interface) for both Vista and XP

http://hi.baidu.com/harbinzju/blog/item/e67c1018514026bc4aedbccd.html



1. 将现有.rc文件中的相应资源的Lauguage改为EN-US.

2. 编写mui.rcconfig并加入到Project中,此文件是XML格式,例如:

<?xml version="1.0" encoding="utf-8"?>
<localization>
    <resources>
       <win32Resources fileType="System">//
msdn说次字段值始终是"Application"?但是这里应该是对的,没有找到出处。
             <localizedResources>
                <resourceType
                       typeNameId="#6"
                />
             </localizedResources>
        </win32Resources>
    </resources>
</localization>

 上面内容的涵义是将字符串资源做为语种相关的资源, 这种资源将生成在多个资源文件中.参见msdn

http://msdn.microsoft.com/library/dd319100(VS.85).aspx

The following are the standard resource types and their numeric identifiers:(会被本地化的资源类型?)

  • CURSOR(1)
  • BITMAP(2)
  • ICON(3)
  • MENU(4)
  • DIALOG(5)
  • STRING(6)
  • FONTDIR(7)
  • FONT(8)
  • ACCELERATORS(9)
  • RCDATA(10)
  • MESSAGETABLE(11)
  • GROUP_CURSOR(12)
  • GROUP_ICON(14)
  • VERSION(16)
  • HTML(23)

 

2. 在Project的Properties中的Resources里的command line中的Additional options里加入

/r /fm "$(IntDir)"/HelloPlugin.muires /q mui.rcconfig, 如下所示HelloPlugin换成"%(Filename)"

这步将mui.rcconfig中的localizedResources节里对应的资源生成到一个muires文件中

 

3. 在Project Properties里的Post-Build Event中的Command Line填加如下内容:

rem **Extra steps to link the MUI files**
if not exist "$(TargetDir)" md "$(OutDir)"
if not exist "$(TargetDir)$(ProjectName)" md "$(TargetDir)$(ProjectName)"
if not exist "$(TargetDir)$(ProjectName)"/EN-US md "$(TargetDir)$(ProjectName)"/EN-US
link.exe /OUT:"$(TargetDir)$(ProjectName)/EN-US/$(TargetName).exe.mui" /DLL /NOENTRY /MACHINE:X86 "$(IntDir)/$(TargetName).muires"
注意,不同的工程文件上面的预定义宏可能要做相应的修改, 下面解释一下具体每句话的用意:

rem **Extra steps to link the MUI files**

注释语句 
if not exist "$(TargetDir)" md "$(OutDir)"

如果$(TargetDir)不存在, 则创建它 
if not exist "$(TargetDir)$(ProjectName)" md "$(TargetDir)$(ProjectName)"

如果$(TargetDir)$(ProjectName)不存在, 则创建它 
if not exist "$(TargetDir)$(ProjectName)"/EN-US md "$(TargetDir)$(ProjectName)"/EN-US

如果"$(TargetDir)$(ProjectName)"/EN-US不存在, 则创建它 
link.exe /OUT:"$(TargetDir)$(ProjectName)/EN-US/$(TargetName).exe.mui" /DLL /NOENTRY /MACHINE:X86 "$(IntDir)/$(TargetName).muires"

链接muires到目标文件中


4. rebuild project

 

 


 

B) 制作各语种的Project:

 

1. 创建一个static library工程,为方便起见, 工程名取为语种的名称

    参考MSDN里的ms-help://MS.LHSMSSDK.1033/MS.LHSWinSDK.1033/intl/nls_238z.htm, Locale Identifier Constants and Strings中Locale name, Local name做为这个工程的名称.

    比如说要制作法语(法国)的库, 名字起为FR-FR, 要制作日文(日本)的库, 名字起为JA-JP.

2. 新创建一个RC文件, 并将A)工程的相应资源, 以本文为例,就是将所有字符串资源加到RC中,注意资源ID要保持一致, 唯一不同的就是字符串的内容, 别忘记将Launguage选为相应的语言

3. 将A)中的mui.rcconfig加入到本工程中.

4. 在Project的Properties中的Resources里的command line中的Additional options里加入

   /r /fm "$(IntDir)"/HelloPlugin.muires /q mui.rcconfig

5. 在Project properties中的Post-Build Event中的Command line里加入

rem **Extra steps to link the MUI files**
if not exist "$(TargetDir)" md "$(OutDir)"
if not exist "$(TargetDir)/HelloPlugin/$(ProjectName)" md "$(TargetDir)/HelloPlugin/$(ProjectName)"
if not exist "$(TargetDir)/HelloPlugin/$(ProjectName)" md "$(TargetDir)/HelloPlugin/$(ProjectName)"
link.exe /OUT:"$(TargetDir)/HelloPlugin/$(ProjectName)/HelloPlugin.exe.mui" /DLL /NOENTRY /MACHINE:X86 "$(IntDir)/$(TargetName).muires"

rem ** Copy Checksum from Language Neutral to MUI file **
echo "$(TargetDir)HelloPlugin.exe"
echo "$(TargetDir)/HelloPlugin/$(ProjectName)/HelloPlugin.exe.mui"
muirct -c "$(TargetDir)HelloPlugin.exe" -e "$(TargetDir)HelloPlugin/$(ProjectName)/HelloPlugin.exe.mui"
注意: 这里比A)中多了muirct项, 此项将会将此语种的mui资源检验和加到到HelloPlugin.exe中. 非常重要,否则取不到相应的资源

 

 

最终的Binary结果如下:

|_Debug

   |_HelloPlugin.exe

   |_EN-US

      |_HelloPlugin.exe.mui

   |_FR-FR

      |_HelloPlugin.exe.mui

 

 

参考: http://code.msdn.microsoft.com/MUIIzer, 里面有几个文档详细介绍了制作的每一步, 本文就是参照它来完成的. 并且还可以用MUIIzer工具来自动生成相应的MUI工程, 不过可能需要安装.NET framework 3.5, 我试了一下生成过一次,后来就总是出错,说一个COM对象创建不出来,估计是我没安装.NET framework 3.5的原因.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值