我在对话框上添加了一个Edit控件,并给Edit控件添加了一个int变量。
运行程序,清空Edit控件中的输入,按确定按钮,会弹出提示:“Please enter an integer”而我需要中文提示。我原来以为是版本的问题,但是我另外新建对话框,再重复上面的步骤,提示却是中文的“请输入一个整数”,我不知道区别在哪里,而且我前面已经建了N多对话框,都是英文的提示。
求答案!

解决方案 »

  1.   

    难道你自己不会写个吗?!
    MessageBox()
      

  2.   

    这个你只要修改资源文件中的语言属性就可以了。在资源文件中,定义了语言的代码页。
    你用文本编辑器,直接打开资源文件,修改如下的内容
    #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修改成上面一样的
      

  3.   

    你在资源文件里面找一下,有几个地方要修改的.全部改成 language 4,2   code_page(936)
      

  4.   

    哪你在onok时,检测edit内容,用MessageBox来控制弹出
      

  5.   

    TO sunrise(日出江花红胜火) :我看了资源文件,是一样的。不是这个原因。
    曲线解决的办法是很多,但是breakind(冰舞) 说的对啊,要不然改的地方太多了。
      

  6.   

    这种情况少见,跟工程资源属性没有关系.
    CString str;
    str.LoadString(AFX_IDP_PARSE_CURRENCY);
    MessageBox(str); //看看弹出的是什么?
      

  7.   

    CString str;
    str.LoadString(AFX_IDP_PARSE_INT);
    MessageBox(str);
      

  8.   

    to seu07201213(【卐】〖汪洋中的一片叶子〗≈^︵^≈) :
    弹出的是“Please enter a currency”
      

  9.   

    经过仔细跟踪,终于找到原因:
    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);  //弹出的是应该中文吧?
      

  10.   

    笔误,更正
    HINSTANCE hLangDLL = LoadLibraryA("C:\\WINDOWS\\system32\\mfc42u.dll");
    改成
    HINSTANCE hLangDLL = LoadLibraryA("C:\\WINDOWS\\system32\\mfc42loc.dll");
    或者
    HINSTANCE hLangDLL = LoadLibraryA("C:\\WINDOWS\\system32\\MFC42CHS.DLL");
      

  11.   

    非常感谢seu07201213(【卐】〖汪洋中的一片叶子〗≈^︵^≈)!
    对你的敬佩犹如滔滔江水......................................
      

  12.   

    一般MFC工程问题,是不必自己直接显式的加载动态库的。我在写对话框的时候,以及打印的时候,就是直接修改VC的资源的属性后就可以的,不自己进行动态库的加载。
    我开发的软件的版本有英文版的、BIG5码版本的,简体版的,仅仅修改了语言的代码页和资源字符串和相关的编译预定的宏。(其实在资源中要修改的地方并不多的,譬如一个对话框就一段定义。也就是对话框的语言属性)直接编译后就 OK了。如果不同的语言要采用不同的代码,要使用不同的代码,那才混乱了。
    看看下面的定义,是不是你的那个宏不是AFX_TARG_CHS
    #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
    看看是不是最终版本的宏没有定义
      

  13.   

    楼上的兄弟,我的就是#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
      

  14.   

    http://www.china-askpro.com/msg35/qa98.shtml
      

  15.   

    今天早上以来,突然来了灵感,发现了问题所在,竟然这么简单,各位不要大跌眼镜啊,呵呵。
    就是如果项目是:“在共享 DLL 中使用 MFC”那么提示是中文的。
                     “静态使用MFC”那么提示是英文的。
    好了,感谢各位的帮助,散分了!