当前位置: 首页 > 编程日记 > 正文

mfc 应用程序 语言进行本地化

在软件国际化的今天,资源从代码中独立出来,使在不同语言操作系统下能运行不同语言版本的程序,是很有意义的事. MFC 7.0 及更高版本提供对附属 DLL 的增强支持,该功能有助于创建针对多种语言进行本地化的应用程序。附属 DLL 是一个纯资源 DLL,它包含应用程序的针对特定语言进行本地化的资源。当应用程序开始执行时,MFC 自动加载最适合于环境的本地化资源。

使用Vs2005可以很方便的创建包含资源的dll.下面简要介绍其步骤:

(1)新建一个与代码文件夹平级的文件夹,文件夹的名字为:代码程序的工程名字+Res。

(2)将所有的资源文件(*.rc),位图,图标文件和resource.h拷贝到资源文件夹下。

   (3)打开VS2005选择File—>New—>Project From Existing code,选择工程的种类为VC++,将工程文件的位置选定为资源文件夹,工程名称为资源文件夹的名称,Next后选择工程类型为DLL工程,然后一路Next下去直到完成。

 (4)在建立好资源工程后,打开该工程,为每一种语言建立一个工程配置项,在配置项中配置好输出路径。在Link—>Advance选项卡中选择Yes/NOENTRY,否则编译会有问题。每一种语言的配置项中只包含本语言的RC文件,其他语言的RC从Build中去除,去除的方法是在工作空间中右键单击该文件,选择属性,会弹出该文件的属性对话框,选择GeneralàExcluded From Buildà为Yes

(5)  在应用程序的APP类中声明一个资源实例句柄,例如HINSTANCE m_hResourceDLL,然后InitInstance函数中使用LoadLibraryAfxSetResourceHandle进行加载,例如:

        m_hResourceDLL = (HINSTANCE)::LoadLibrary(strResFilePath);
       if( !m_hResourceDLL )
       {
              return FALSE;
       }
       AfxSetResourceHandle( m_hResourceDLL );
 
最后在ExitInstance函数中使用FreeLibrary函数进行卸载,例如
if( m_hResourceDLL )
{
       FreeLibrary( m_hResourceDLL );
}
(6)可用GetUserDefaultUILanguage,GetUserDefaultLangID等检测操作系统语言
以下是一些注意事项:
(1)在获取资源路径时,LoadLibrary最好使用绝对路径,使用相对路径在某些语言操作系统就会失败。
(2)代码中如果有的地方使用了PlantForm SDK中的函数(例如LoadIconLoadBitmap)来加载资源文件中资源(非标准资源),这些函数需要指定实例句柄,请使用AfxGetResourceHandle函数来替换APP的实例句柄。
(3)   并非使用Unicode资源,文字就可以在所有语言操作系统上正确显示,没有设置正确的字体也不行,特别是对繁体,韩文。“Microsoft Sans Serif”是相对包含各种语言最多的字体,韩文和繁体显示也是正常的,但该字体2000操作系统不支持。
(4)代码中使用Textout,DrawText的地方如果没有设置,默认是System字体,该字体支持语言范围相对较小,推荐在使用上述函数前设置字体。
(5)ATL生成的代码,rgs虽然在资源里,但那是注册时使用的脚本,不要也提到资源里。
(6)    提出的资源文件(文本方式打开)里可以删掉
3 TEXTINCLUDE
BEGIN
    "1 TYPELIB ""AlarmWinConfig.tlb""\r\n"
    "\0"
END
纯资源文件不会有类型库。
(7)编译选项里可以去掉生成调试信息,导入库.因为对纯资源文件没什么意义.
(8)  代码里的 字符串资源注意提到资源里,如一些报错的字符串,即硬编码.
(9)   rc资源文件(文本方式打开)里:
3 TEXTINCLUDE
BEGIN
    "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
    "#define _AFX_NO_OLE_RESOURCES\r\n"
    "#define _AFX_NO_TRACKER_RESOURCES\r\n"
    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
    "\r\n"
    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n"
    "#ifdef _WIN32\r\n"
    "LANGUAGE 4, 2\r\n"
    "#pragma code_page(936)\r\n"
    "#endif //_WIN32\r\n"
    "#include ""l.chs\\afxres.rc""          // Standard components\r\n"
    "#endif\r\n"
    "\0"
END
其中"#include ""l.chs\\afxres.rc"" 为标准资源,不同语言其路径不一样,如果不添加标准资源,程序里需处理所有非法情况
(10)最好程序和资源都采用静态连接编译.

转载于:https://www.cnblogs.com/zzq-gates/archive/2007/12/14/994937.html

相关文章:

前端优化系列之一:dns预获取 dns-prefetch 提升页面载入速度

问题:怎么做到dns域解析?用于优化网站页面的图片问题:怎么提升网站性能?dns域解析,是提升网站的一个办法。DNS Prefetch,即DNS预获取,是前端优化的一部分。 一般来说,在前端优化中与…

暑假集训D15总结

考试 日常爆炸 T1数据背锅,回天乏力 推了两个小时的T2竟然莫名RE,我也是服了 T3考试时就没读懂题,做个鬼啊 今天一直在写某奇怪的技术贴,竟然没有写题解(手动滑稽) 希望明天不要乱炸吧 博客 强行推荐一波自…

maven-assembly-plugin和maven-shade-plugin打包区别及弊端

使用 maven 插件 maven-shade-plugin 对可执行 java 工程及其全部依赖 jar 进行打包 maven-shade-pluginmaven-assembly-pluginmavenjar打包 现在基本上都是采用 maven 来进行开发管理,我有一个需求是需要把通过 maven 管理的 java 工程打成可执行的 jar 包&#x…

【Spark】Spark基础练习题(一)

题目: 1、创建一个1-10数组的RDD,将所有元素*2形成新的RDD 2、创建一个10-20数组的RDD,使用mapPartitions将所有元素*2形成新的RDD 3、创建一个元素为 1-5 的RDD,运用 flatMap创建一个新的 RDD,新的 RDD 为原 RDD 每…

Python(27)_字符串的常用的方法2

#-*-coding:utf-8-*-字符串操作s " bowen " # 从右边删 s1 s.rstrip() print(len(s1)) s2 s1.lstrip() print(len(s2)) 从右边删除元素,从左边删除元素,这个在以后项目中经常用到 二、计算个数 #-*-coding:utf-8-*-字符串操作s " bo…

tensorflow1

1、什么是tensorflow tensorflow是一个开源软件库,使用data flow graphs进行数值计算,最初由Google大脑团队开发,用于机器学习和深度卷积网络的研究,同样适用于其他广泛的领域。 2、访问tensorflow官网:在Windows的hos…

大型企业门户网站设计开发一般性原则和建议

[适用范围] 本文所述的原则、建议适用于大型企业信息门户网站的设计和开发,注意不是小型企业网站、一般企业电子商务网站、企业级Web应用系统。 [一般性原则] 一、网站设计原则 第一原则:内容丰富、明确 网站主要是为浏览着提供信息服务的,作…

8月第3周回顾:四巨头发三大新闻 一报告引多家争议

8月15日是51CTO.com成立两周年的日子,网站举办了多种活动进行了庆祝;凑巧的是,IT界在本周也热闹非凡:微软、甲骨文、IBM和Sun联手送上三份重要新闻;国内一份个人安全的报告引起一场小小的风波——这些都足以让关注IT技…

车辆匹配和平均车速计算

数据测试内容以及详情见 https://github.com/xueyeyu/avgsp /* 作者:雪夜羽 平均车速计算(sqlserver)基于电警 QQ:1412900482 */ import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement…

为何 Map接口不继承Collection接口

1.首先Map提供的是键值对映射(即Key和value的映射),而collection提供的是一组数据(并不是键值对映射)。 如果map继承了collection接口,那么所有实现了map接口的类到底是用map的键值对映射数据还是用collec…

Linux 开机网络无法自动连接配置、网络开机自动连接

第一步:查看开机后网络是否正常连接? 1、图形界面开机后直接看右上角的网络是否连接正常(如图一)。 图一(表示未正常连接↑↑↑↑↑↑↑↑↑) 2、如果是命令页面的,可以使用命令查看网络连接情况…

sql中将分隔字符串转为临时表的方法

问题: 要求将 一字符串 0,1,2,3,4,5 ;将,分隔后的每一内容转为一行记录到数据库表中declare table_串转数组 table( adapt_object int default 0) declare tmp_str varchar(100) declare tmp_index int select tmp_index 1 select tmp_str 0,1,12,03,4,5,a,…

每天学一点flash(15) xml的一些常见写法

今天下了大雨来了&#xff0c;什么地方去不了&#xff0c;只好将想写的东西都记载下来。 一些常见的一些xml写法&#xff0c;收集目的就是为了代码调试方便&#xff1a; 一&#xff0e;简单数组单值形 <?xml version"1.0" encoding"UTF-8"?> <i…

spark为什么比hive速度快?

spark是什么&#xff1f; spark是针对于大规模数据处理的统一分析引擎&#xff0c;通俗点说就是基于内存计算的框架 spark和hive的区别&#xff1f; spark的job输出结果可保存在内存中&#xff0c;而MapReduce的job输出结果只能保存在磁盘中&#xff0c;io读取速度要比内存中…

kotlin 练习

kotlin基础语法 samychen 关注 2017.05.28 17:07* 字数 1224 阅读 2434评论 0喜欢 6每种编程语言都有一定的语法、语义和执行顺序(同步)&#xff0c;学习一种新语言也都是从这三者出发&#xff0c;下面我们就只针对kotlin的语法来做简单的介绍。 Kotlin有自己的特性不该被Java的…

软件设计之 数据库设计

[按语&#xff1a;在软件设计或是动态网站开发中&#xff0c;数据库设计时很重要&#xff0c;我觉得可以说是开发工作的核心部分&#xff0c;所以学好数据库设计&#xff0c;是很重要的&#xff0c;也是大有前途的。。。]◆&#xff0e;概念首先要搞清楚容易混淆的两个概念&…

css结构思维导图

以下的图是根据css基础&#xff0c;样式&#xff0c;框模型&#xff0c;定位以及选择器这几个方面总结出来的思维导图&#xff0c;方便记忆以及查询。 转载于:https://www.cnblogs.com/yuexiuyi/p/7352516.html

C#类的修饰符

访问修饰符:public&#xff1a;访问不受限制。protected&#xff1a;访问仅限于包含类或从包含类派生的类型。只有包含该成员的类以及继承的类可以存取.Internal&#xff1a;访问仅限于当前程序集。只有当前工程可以存取.protected internal&#xff1a;访问仅限于当前程序集或…

Appium+Python 自动化测试一之:环境安装(Android篇)

目前网上有大量AppiumPython的APP自动化测试的资料&#xff0c;这里我只是记录一下自己安装的过程&#xff0c;好让自己以后忘记的时候再翻起来看看&#xff0c;快速上手&#xff0c;不想再像之前那样踩坑。 注&#xff1a;因为之前玩过Robot FrameworkSelenium2&#xff0c;所…

sql server 2005 T-SQL @@TOTAL_READ (Transact-SQL)

返回 SQL Server 自上次启动后由 SQL Server 读取&#xff08;非缓存读取&#xff09;的磁盘的数目。 Transact-SQL 语法约定 语法 TOTAL_READ 返回类型 integer 备注 若要显示包含多项 SQL Server 统计信息&#xff08;包括读写活动&#xff09;的报表&#xff0c;请运行 sp_m…

存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储

存储结构分四类&#xff1a;顺序存储、链接存储、索引存储 和 散列存储。 顺序结构和链接结构适用在内存结构中。 顺序表每个单元都是按物理顺序排列的&#xff0c;如果你想访问那个单元你可以根据提供的指针等直接访问到需要的东西&#xff0c;但是链表是逻辑连续不是物理连续…

[luoguP2618] 数字工程(DP)

传送门 离线处理。。。 先线性筛一遍。 直接预处理出所有答案。 注意要用push&#xff0c;用乘法&#xff0c;常数小。 #include <cstdio> #include <cstring> #define N 1000001 #define min(x, y) ((x) < (y) ? (x) : (y))int n, cnt; int f[N], prime[N]; b…

QOS的qmtoken 1

在有拥塞的时候高层协议如TCP可能自己可以控制下拥塞&#xff0c;因此你的队列效果可能不明显了&#xff0c;这个时候TCP就是&#xff0c;网络拥塞丢包增加&#xff0c;重传增加。此时可以定义波特率修改接口带宽&#xff0c;从而从底层截掉带宽制作拥塞或使用LR&#xff0c;LR…

关于SQL的基础知识点

文章目录一 了解SQL二 检索数据三 排序检索数据四 过滤数据五 高级数据过滤六 用通配符进行过滤七 创建计算字段八 使用数据处理函数九 汇总数据十 分组数据十一、 子查询十二、 联结表十三、 创建高级联结十四 组合查询十五 插入数据十六 更新和删除数据十七 创建和操纵表十八…

DB-MySQL:MySQL 事务

ylbtech-DB-MySQL&#xff1a;MySQL 事务1.返回顶部 1、MySQL 事务 MySQL 事务主要用于处理操作量大&#xff0c;复杂度高的数据。比如说&#xff0c;在人员管理系统中&#xff0c;你删除一个人员&#xff0c;你即需要删除人员的基本资料&#xff0c;也要删除和该人员相关的信息…

asp.net程序性能优化的七个方面

asp.net程序性能优化的七个方面 一、数据库操作 1、用完马上关闭数据库连接 访问数据库资源需要创建连接、打开连接和关闭连接几个操作。这些过程需要多次与数据库交换信息以通过身份验证&#xff0c;比较耗费服务器资 源。ASP.NET中提供了连接池&#xff08;Connection Pool&a…

如何在Windows Server 2008 Core里面添加Role~~~

SERVER CORE 中添加服务器添加AD&#xff1a;在SERVER CORE 下安装AD必须使用UNATTEND文件来进行安装以下是一个UNATTED文件的实例; DCPROMO unattend file (automatically generated by dcpromo); Usage:; dcpromo.exe /unattend:F:\LONGHORN.txt;[DCInstall]; New forest p…

关于MySQL的四种事务隔离级别!

本文实验的测试环境&#xff1a;Windows 10cmdMySQL5.6.36InnoDB 一、事务的基本要素&#xff08;ACID&#xff09; 原子性&#xff08;Atomicity&#xff09;&#xff1a;事务开始后所有操作&#xff0c;要么全部做完&#xff0c;要么全部不做&#xff0c;不可能停滞在中间环…

[PKUWC2018]随机算法

题意&#xff1a;https://loj.ac/problem/2540 给定一个图(n<20)&#xff0c;定义一个求最大独立集的随机化算法 产生一个排列&#xff0c;依次加入&#xff0c;能加入就加入 求得到最大独立集的概率 loj2540 「PKUWC 2018」随机算法 本质就是计数题 每个点有三种状态&#…

angular4 note

纪录作为新手&#xff0c;用新版angular遇到的一些细节点 1. .angular-cli.json文件 一开始没注意这个文件干啥的&#xff0c;直到我发现有个第三方js&#xff0c;我既没有在index.html里看到引用&#xff0c;也没看到在js代码里有import&#xff0c;找了好久&#xff0c;在这…