我在对话框上添加了一个Edit控件,并给Edit控件添加了一个int变量。
运行程序,清空Edit控件中的输入,按确定按钮,会弹出提示:“Please enter an integer”而我需要中文提示。我原来以为是版本的问题,但是我另外新建对话框,再重复上面的步骤,提示却是中文的“请输入一个整数”,我不知道区别在哪里,而且我前面已经建了N多对话框,都是英文的提示。
求答案!
运行程序,清空Edit控件中的输入,按确定按钮,会弹出提示:“Please enter an integer”而我需要中文提示。我原来以为是版本的问题,但是我另外新建对话框,再重复上面的步骤,提示却是中文的“请输入一个整数”,我不知道区别在哪里,而且我前面已经建了N多对话框,都是英文的提示。
求答案!
MessageBox()
你用文本编辑器,直接打开资源文件,修改如下的内容
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
LANGUAGE 4, 2
#pragma code_page(936)
#include "res\\WeaveEditor.rc2" // 非 Microsoft Visual C++ 编辑的资源
#include "afxres.rc" // 标准组件
#include "afxprint.rc" // 打印/打印预览资源
#include "afxolesv.rc" // OLE 服务器资源
#endif
#endif // not APSTUDIO_INVOKED
把你的资源文件中的LANGUAGE 和code_page修改成上面一样的
曲线解决的办法是很多,但是breakind(冰舞) 说的对啊,要不然改的地方太多了。
CString str;
str.LoadString(AFX_IDP_PARSE_CURRENCY);
MessageBox(str); //看看弹出的是什么?
str.LoadString(AFX_IDP_PARSE_INT);
MessageBox(str);
弹出的是“Please enter a currency”
MFC\SRC\DLLINIT.CPP中有这么一段:
// load language specific DLL
// the DLL must be in the "system directory"
static const char szPrefix[] = "\\MFC42";
static const char szLOC[] = "LOC";
static const char szDLL[] = ".DLL";
char szLangDLL[_MAX_PATH+14]; // Note: 8.3 name
GetSystemDirectoryA(szLangDLL, _countof(szLangDLL));
lstrcatA(szLangDLL, szPrefix); // try MFC42LOC.DLL
lstrcatA(szLangDLL, szLOC);
lstrcatA(szLangDLL, szDLL);
HINSTANCE hLangDLL = LoadLibraryA(szLangDLL);
AFX_MODULE_STATE* pState = AfxGetModuleState();
pState->m_appLangDLL = hLangDLL;其中默认的是调用C:\\WINDOWS\\system32\\mfc42loc.dll,而载入mfc42u.dll时会出现english
在初始化时改成载入mfc42loc.dll:例如
HINSTANCE hLangDLL = LoadLibraryA("C:\\WINDOWS\\system32\\mfc42u.dll");
AfxGetModuleState()->m_appLangDLL = hLangDLL; char str[100];
HINSTANCE hLangDLL = LoadLibraryA("C:\\WINDOWS\\system32\\mfc42u.dll");
AfxGetModuleState()->m_appLangDLL = hLangDLL;//测试下;
HINSTANCE hInst = AfxGetModuleState()->m_appLangDLL;
::LoadString(hInst, AFX_IDP_PARSE_INT, str, 100 );
MessageBox(str); //弹出的是应该中文吧?
HINSTANCE hLangDLL = LoadLibraryA("C:\\WINDOWS\\system32\\mfc42u.dll");
改成
HINSTANCE hLangDLL = LoadLibraryA("C:\\WINDOWS\\system32\\mfc42loc.dll");
或者
HINSTANCE hLangDLL = LoadLibraryA("C:\\WINDOWS\\system32\\MFC42CHS.DLL");
对你的敬佩犹如滔滔江水......................................
我开发的软件的版本有英文版的、BIG5码版本的,简体版的,仅仅修改了语言的代码页和资源字符串和相关的编译预定的宏。(其实在资源中要修改的地方并不多的,譬如一个对话框就一段定义。也就是对话框的语言属性)直接编译后就 OK了。如果不同的语言要采用不同的代码,要使用不同的代码,那才混乱了。
看看下面的定义,是不是你的那个宏不是AFX_TARG_CHS
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
看看是不是最终版本的宏没有定义
就是如果项目是:“在共享 DLL 中使用 MFC”那么提示是中文的。
“静态使用MFC”那么提示是英文的。
好了,感谢各位的帮助,散分了!