CSting   Title=_T("nihao");
BYTE    Buf[1024];
wcharcopy(buf,Title); //网上找的转换函数。
构建对话框,buf的内容作为标题,对话框标题显示正常“nihao”
。。但是如果是:CSting   Title=_T("你好nihao");
BYTE    Buf[1024];
wcharcopy(buf,Title);//网上找的转换函数。如果是汉字就是乱码,对话框标题显示一串“???????nihao”,就是其中的汉字无法显示,这是什么原因呢。工程使用_MBCS编码。请高手不吝指教。

解决方案 »

  1.   

    版本高一点的VS 有CStringA 和 CStringW 可以直接使用
    或者 MultiByteToWideChar 转一下
      

  2.   

    按照楼上的提示,网上搜到的,尝试写,编译老出错。不知道错在什么地方,代码如下
                    CString m_Title="你好nihao";
    int n = m_Title.GetLength();
    int len = WideCharToMultiByte(CP_ACP,0,(char*)LPCSTR(m_Title),n,NULL,0,NULL,NULL);
            char * ptitle = new char[len+1];
    WideCharToMultiByte(CP_ACP,0,m_Title,m_Title.GetLength() + 1 ,ptitle,len + 1 ,NULL,NULL);
    ptitle[len+1] = '/0';编译通不过,错误提示:
    error C2664: 'WideCharToMultiByte' : cannot convert parameter 3 from 'char *' to 'const unsigned short *'这么个问题搞2小时了。请高手指教啊
      

  3.   

    WideCharToMultiByte是将unicode转多字节,你这本身就是个多字节还转个屁啊。
    const char *p = m_Title.GetString();
    如果要存入数组就strcpy_s
      

  4.   


    糊涂了,应该用
    MultiByteToWideChar,奇怪还是总编译不过去,晕死了。
    代码如下:
                    int   Tlen=m_Title.GetLength();
    const char *pTitle = m_Title.GetBuffer(Tlen);
    int charLen = strlen(pTitle);
    int len = MultiByteToWideChar(CP_ACP,0,pTitle,Tlen,NULL,0);
    TCHAR *buf = new TCHAR[len + 1];
    MultiByteToWideChar(CP_ACP,0,pTitle,charLen,buf,len);
    buf[len] = '/0';  我几乎就是照搬网上的讲解啊,编译错误:
    error C2664: 'MultiByteToWideChar' : cannot convert parameter 5 from 'char *' to 'unsigned short *'
      

  5.   

    WCHAR *buf = new WCHAR[len + 1];
      

  6.   

    你的工程是多字节的,此时的TCHAR就是char,至于为什么,要么仔细看下TCHAR的定义,要么去百度下TCHAR到底是啥,参数要求是unsigned short*,你传个char*当然编译不过
      

  7.   

    WCHAR *buf = new WCHAR[len + 1];
    MultiByteToWideChar(CP_ACP,0,pTitle,charLen,buf,len);
    buf[len] = '/0'; 
                    BYTE* ptr=m_buf[1000];
    memcpy(ptr,buf,sizeof(buf));

    delete []buf;
                    InitModalIndirect( (DLGTEMPLATE*) m_buf, pParent );

     发现构造出来对话框的标题还是乱码呢。
      

  8.   

    1:buf[len] = '/0'; ->buf[len] = '\0'; 
    2:memcpy(ptr,buf,sizeof(buf));这行代码莫名其妙
    3:不知道为啥要MultiByteToWideChar,汉字存入byte数组跟对话框标题乱码有个毛关系