编译环境:
VC2005 
Character Set :Use Multi-Byte Character Set在弹出文件对话框后,获取中文的字符串资源出现了乱码,哪位大侠看看问题在哪
代码如下:
void CTestEncodeDlg::OnBnClickedButton1()
{
CString str;
str.LoadString(2004);
::MessageBox(NULL, str, NULL, NULL);            //这个是正常的 CFileDialog dlg(TRUE);
dlg.DoModal(); str.LoadString(2004);
::MessageBox(NULL, str, "", NULL);              //这里就成了乱码,都是??????
}据我了解,在弹出文件对话框后会改变运行的语言环境,但是使用了::setlocale(LC_ALL, "chs");设置环境后问题还是没有解决,跟踪LoadString函数,发现在对话框弹出前后WideCharToMultiByte得到的字符串长度不一样,谁帮忙看看如何解决?

解决方案 »

  1.   

    是有这样的问题,用SetThreadLocale试试。
      

  2.   

    非常感谢cnzdgs ,使用SetThreadLocale(LOCALE_SYSTEM_DEFAULT);设置成系统默认环境后就ok了,但还是有点弄不清楚为啥setlocale无效。
    顺便说下问题的原因,好像是因为机器上装了TortoiseCVS,它有个TortoiseShell.dll会嵌入到explorer里,打开浏览器到时候会修改语言环境,装了各种浏览器插件的机器都可能会有这种问题。
      

  3.   

    我对setlocale不太了解,你可以自己调试跟踪setlocale看看。