实例 10…2:界面汉化实例。源代码在光盘中“10实例 10…2”目录下。
本节以创建一个默认语种为简体中文的 Languages 应用程序为例,进一步详细说明。该
程序不含任何资源,应用程序根据系统的语种设置连接对应的资源链接库,以完成对中文和
英文两种语言的支持。
附带光盘中的 chinese。dll 和 english。dll 两个动态链接库分别封装了中文资源和英文资源,
下面具体介绍 Languages 应用程序的实现过程。
1.创建 Languages
用 MFC AppWizad(exe)创建新项目的工作区,选择 Simple Document 类型、中国中文(其
他的选项选择默认) ,并且为了明确,将工作区目录改为“多语种支持”。
2 .添加数据成员
由于要动态地装入资源链接库,所以需要保存链接库的句柄以便在程序结束的时候释放
·267 ·
…………………………………………………………Page 279……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
资源。将下述数据成员添加到 CLanguagesApp 类中,代码如下:
protected:
//资源链接库句柄
HINSTANCE m_hLangDLL;
3 .修改 InitInstance() 函数
应用程序需要判别系统的默认语种,并装入对应的资源链接库。将下面的代码加到
InitInstance 函数中,代码如下:
BOOL CLanguagesApp::InitInstance()
{
AfxEnableControlContainer();
// 判定系统默认语种
WORD wLangPID=PRIMARYLANGID(::GetSystemDefaultLangID());
// 载入资源动态链接库
switch( wLangPID)
{
case LANG_CHINESE:
m_hLangDLL=::LoadLibrary(〃chinese。dll〃);
break ;
default:
m_hLangDLL=::LoadLibrary(〃english。dll〃);
break;
}
if(!m_hLangDLL)
{
AfxMessageBox(_T(〃无法装载资源链接库!〃)) ;
return FALSE ;
}
// 连接资源
AfxSetResourceHandle(m_hLangDLL) ;
……
}
其中,操作系统所使用的默认语种由 Win 32 函数 GetSystemDefaultLangID 取得。宏
PRIMARYLANGID 取出主语言标识符进行判断,以正确选择应该调用的链接库。链接库的
加载由 Win32 函数 LoadLibrary 实现。程序中所使用的资源库由 AfxSetResourceHandle 函数
指定。
4 .处理 ExitInstance() 函数
程序退出时使用 Win 32 函数 FreeLibrary 卸载已经装入的动态链接库。将下列代码添加
到 ExitInstance 函数中,代码如下:
·268 ·
…………………………………………………………Page 280……………………………………………………………
第 10 章 动态链接库
int CLanguagesApp::ExitInstance()
{
//释放资源链接库
if(m_hLangDLL)
AfxFreeLibrary(m_hLangDLL);
return CWinApp::ExitInstance();
}
5 .修改 OnDraw
为了说明是从资源链接库中动态地获取数据而不是从程序的执行体中获取,该程序从资
源链接库中获取了一个字符串,并绘制在屏幕上。代码如下:
void CLanguagesView::OnDraw(CDC* pDC)
{
CLanguagesDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CString strMsg;
strMsg。LoadString(IDS_HELLO);
pDC…》TextOut(60;15;strMsg);
// TODO: add draw code for native data here
}
6 .从项目中移走 Languages。rc 文件
因 为 Languages 自 身 并不 需 要 含 有 任 何 资 源 , 所 以 可 以从 项 目 列 表 文 件 中 移 走
Languages。rc 文件(并不删除)。ClassWizad 不允许项目不包含资源文件,可以创建一个空资
源文件并将其加入到项目中,然后重建信息文件(Languages。CLW ),使得 ClassWizad 可以继
续管理程序的消息处理 。但在本例中所有的函数都已经加入,可不必为项目创建空资源文件。
7 .建立项目
修 改 设 置 , 选 择 “ Project| Setting … ” 菜 单 命 令 , 在 Link 标 签 下 将 输 出 文 件 名
DebugLanguages。exe 改为 Languages。exe 。编译项目,如果应用程序中没有任何资源,会出
现找不到资源链接库的错误,下面的一系列步骤为本项目分别创建简体中文和美国英语的资
源链接库。在这两个链接库建立后,把它们放到 Languages 项目目录中,程序就可以运行了。
建立中文资源链接库的主要步骤如下。
o 选择 Regular DLL…based 应用程序并单击“Finish ”按钮完成创建。动态链接库项目只
包含资源,不需要其他文件,所以从项目中删除所有其他文件。
o 把 Languages 相关的资源文件拷贝到 Language_chinese 项目的对应目录下。
o 把 Languages。rc 加入到 Language_chinese 项目中,使得 Languages。rc 为项目中的惟一
文件。
o 在串资源表(String Table)中添加串 IDS_HELLO=200 ,标题为“这是中文版 !!”。
·269 ·
…………………………………………………………Page 281……………………………………………………………
Visual C++ 6。0 程序设计从入门到精通
o 从 Project 菜单中选择“Setting…”选项。首先,将输出文件名DebugLanguage_chines
e。dll 改为。。chinese。dll,将动态链接库直接建立在 Languages 项目目录下。然后在链接
命令行中添加“/NOENTRY ”选项。最后,编译并建立动态链接库。
生成英文版资源文件最快捷的方法是创建一个基于英文版的临时项目,并把资源文件复
制到英文链接库项目中。其处理方法与中文资源链接库类似。
注意:在修改资源组件设置时,不但要将 Project 菜单 Setting 对话框中 Resource 标签的默认文字
改为“英语(美国)”,还要删除预处理定义中的“_AFXDLL ”。删除_AFXDLL 预处理器,
可以使用户的链接库包含通用的 MFC 资源。否则,应用程序会从系统安装的 MFC 动态链
接库中收集通用的 MFC 资源,应用程序特定资源会被本地化。
这样,应用
小说推荐
- C语言游戏编程从入门到精通(PDF格式)
- -Page 1-Page 2-Page 3-Page 4-Page 5-Page 6-Page 7-Page 8-Page 9-Page 10-Page 11-Page 12-Page 13-Page 14
- 最新章:第4章
- oracle从入门到精通(PDF格式)
- -Page 1-Oracle 从入门到精通-Page 2-资源来自网络,仅供学习 Oracle 从入门到精通一、SQL 8
- 最新章:第37章
- php程序设计简明教程(DOC格式)
- -Page 1-PHP 程序设计简明教程PHP 讲义 第 1 页 共 90 页-Page 2-目录序 4第一章 PHP 简介 6
- 最新章:第31章
- VB2008从入门到精通(PDF格式英文版)
- -Page 1(R)The eXperT’s Voice inBeginningVB 2008From Novice to ProfessionalChristian Gross-Page 2-Page 3-Beginning VB 2008From Novice to Professional■C
- 最新章:第214章
- C语言设计
- 作者:谭浩强1 C 语言概述1.1 C语言的发展过程1.2 当代最优秀的程序设计语言1.3 C语言版本1.4 C语言的特点1.5 面向对象的程序设计语言1.6 C和C+1.7 简单的C程序介绍1.8 输入和输出函数1.9 C源程序的结构特点1.10书写程序时应遵循的规则1.11C语言的字符集1.12
- 最新章:第45章
- 设计成婚:不入豪门
- 作者:海未央《设计成婚2:名门新娘》作品介绍《名门新娘》介绍:她是骆家收养的孤女,性格因为受他的影响,变得有些古灵精怪,也懂得是非之分!他说他的一切只为他而努力,可是为什么要拒绝自己呢?什么?没有满十八岁?那今天生日,够十八岁了吧?什么,还太小?太过分了,这不是耍着自己玩吗?嘿嘿,有个邪恶的老师,那
- 最新章:第196章
- 玄学,从入门到放弃
- 《玄学,从入门到放弃》作者:李传言文案:周诣一手拿着卜卦,一手拿着《演员的自我修养,叹息良久。他本是百年前观天占星的玄术师,谁知却一朝重生现代。他只想平淡地生活下去,可天不遂人愿,他注定将在这末法时代掀起波澜!成就一代影帝!谢千仇沉默地看着他…大师,你卦和书都拿倒了#玄学,从入门到放弃,入土,删库跑
- 最新章:第86章
- C语言实例教程(PDF格式)
- -Page 1-前 言Visual C+是开发运行于Windows 95和Windows NT环境下的Win32应用程序的可视化编程工具中最重要的成员之一,它为软件开发人员提供了完整的编辑、编译和调试工具和建立于Win32 API(ApplicationProgramming Interface)基
- 最新章:第143章
- 要你言听计从
- 作者:决明第一章哈士奇,没有护卫看家的本领,对主人、客人甚至是闯空门的恶人都一样友善,咬着皮球跟小偷一块玩你丢我捡也不用太惊讶,时常被人认为忠诚度不足。贺世祺背靠在冰冷玻璃落地窗前,一整间屋子都是伸手不见五指的黑暗,也好,反正他现在什么也不需要看到,只要耳朵还有听觉就好,顺便听听贴在耳边的手机里还要
- 最新章:第28章