今天又遇到了这个问题,以前记得一个网友回答了这个问题,根据记忆的片断和今天一下午在msdn中搜索结果,终于搞定,赶紧把解决方法记下来。
在安装了XTremeToolkit2.0的环境中,使用XTreme向导创建的应用程序,是无法选择中文的。因而使用此向导产生的应用程序是无法使用中文的,当你在此向导产生的应用程序中添加中文资源时,显示将会是乱码。
怎样解决这个问题那?
方法一、从根本上解决问题。改变向导,生成中文工程。
原理:在使用Xtreme向导建立应用程序时,第一步,如下图所示,在选择语言项中,是不支持中文的。这个选项是由SetSupportedLanguages( LPCTSTR szSupportedLangs )控制的。
这个函数可以类CCustomAppWiz的成员函数InitCustomAppWiz中找到。其参数是由\n分割的语言项构成:
“language-name#1 (APPWZ*.DLL-name#1);translation-identifier#1\n
language-name#2 (APPWZ*.DLL-name#2);translation-identifier#2\n...
...language-name#i (APPWZ*.DLL-name#i);translation-identifier#i\n”
具体内容,请参考MSDN。
开始修改,如果你象我一样,拿到的是XtremeToolkit2.0retailVersion(一下简称XT),那么你的情况就和我一样了。这样,我们至少拿到了他的源代码。XT提供了自己的向导,并且你可以在安装完毕后的开始菜单中找到这个工程,ToolkitProject菜单下ApplicationWizard(6),这里6表示生成的向导是在VisualC++6.0使用的。打开,找到类CXTAppWizardAppWiz的成员函数InitCustomAppWiz(),在这个函数中你会看到控制语言选项的函数SetSupportedLanguages(_T("German [Standard] (APPWZDEU.DLL);0x40704b0\nEnglish [United States] (APPWZENU.DLL);0x40904b0\nSpanish [International Sort] (APPWZESP.DLL);0xc0a04b0\nFrench [Standard] (APPWZFRA.DLL);0x40c04b0\nItalian [Standard] (APPWZITA.DLL);0x41004b0"));对此进行修改,添加中文支持。
修改如下:
SetSupportedLanguages(_T("中文 [简体] (APPWZCHS.DLL);0x80403A8\n德语 [标准] (APPWZDEU.DLL);0x40704b0\n英语 [美国] (APPWZENU.DLL);0x40904b0\n西班牙 [International Sort] (APPWZESP.DLL);0xc0a04b0\n法语 [标准] (APPWZFRA.DLL);0x40c04b0\n意大利 [Standard] (APPWZITA.DLL);0x41004b0"));
好,编译,生成Release版,退出VisualC++环境。
在开始菜单中找到codejock Software->wizards->launch Deployment wizard。直接进入第三步,选择如下图示,下一步,直到完成。
重新打开visual C++运行环境,使用Xtreme Toolkit Appwizard,进入第一步,你会看到,中文已经出现在选择菜单中了。编译生成的文件,可是中文界面哦。方法二,将已经使用向导生成了英文的工程转换成支持中文资源的工程。
打开工程,点击View->Resource Includes,会看到弹出一个对话框,其中么修改的内容如下:
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif //_WIN32
#include "res\TEs.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc" // Standard components
#include "afxprint.rc" // printing/print preview resources
#endif
语言和代码页我们么修改成中文的,这样当你把工程中的资源改成中文后,就会自动调用中文资源了。根据我的经验,我在将以前一个英文的工程转成中文,只是将菜单等资源重新插入一个拷贝,改成中文资源,就可以了。但是如果直接更改也没有问题。
上面的内容修改如下:
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
#ifdef _WIN32
LANGUAGE 4, 2
#pragma code_page(936)
#endif //_WIN32
#include "res\TEs.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc" // Standard components
#include "afxprint.rc" // printing/print preview resources
#endif
到此,我们再回头解释一下SetSupportedLanguages中的参数,是一些由“中文 [简体] (APPWZCHS.DLL);0x80403A8\n”组成的字符串,其中又一个十六进制的串,意义如下,高位字节表示语言0804,即LCID,低位表示03A8代码页936。
最后一项工作,为了使你的XTremetoolkit完全的支持中文,我们在其安装目录include下,可以看到l.cn文件夹,这个文件夹下即为中文支持资源,将其拷贝到include下,覆盖原文件,打开,如果发现他是乱码,那么,自己汉化他吧(没办法,我的就是乱码,自己汉化了半天),这样你在以后的调用中,就可以看到XTremeToolkit内部的资源都是中文了。