解决方案 »

  1.   

    不清楚你的代码中是怎么写的?不过最好是工程设置为使用Unicode编码方式
      

  2.   

    如果你使用的是控件类是MFC提供的标准控件, 那肯定是TCHAR类型的, 如查是第三方自定义控件, 那就没准了, 如果开发控件的人习惯在多字符集下编程, 那么其参数多半是char, 如果习惯在unicode下编程的一般都用TCHAR.
      

  3.   

    管你需要宽还是unicode
    都可以任意转换的啊
    unicode下  CString是单字节的  CStringW宽字节
      

  4.   

    多半是编码问题,最好统一用一种编码,如果有必须,创建ANSI和UNICODE两个版本。
      

  5.   

    怎么设置呢?在预处理器、字符集都要填吗,这两个地方我都写了, 但还是没有用。是不是还有什么地方没填呢?
    我用button::create创建一个自定义按扭,第一个参数填 L"csdn" ,不会出现乱码,但如果使用TCHAR型的指针传递参数,就出现乱码, 这是为什么呢?两者不都是宽字节的吗
      

  6.   

    怎么统一用一种编码呢?如何创建ANSI和两种版本?
    我用button::create创建一个自定义按扭,第一个参数填 L"csdn" ,不会出现乱码,但如果使用TCHAR型的指针传递参数,就出现乱码, 这是为什么呢?两者不都是宽字节的吗
      

  7.   

    任意转换是什么意思?如果我用CBUTTON::create创建一个自定义按钮呢,这个create有没有另外指定的单字节函数还是宽字节函数?
      

  8.   

    任意转换是什么意思?如果我用CBUTTON::create创建一个自定义按钮呢,这个create有没有另外指定的单字节函数还是宽字节函数?在unicode下  create 的参数  L"名称"  就行了
      

  9.   

    任意转换是什么意思?如果我用CBUTTON::create创建一个自定义按钮呢,这个create有没有另外指定的单字节函数还是宽字节函数?在unicode下  create 的参数  L"名称"  就行了
    不过我要传递变量啊,比如第一个参数不用 L"名称",我传递一个TCHAR型的指针变量,就乱码了,要怎么改?
      

  10.   

    强调使用UNICODE编译#ifndef UNICODE
    #define UNICODE
    #endif#ifdef UNICODE
    #ifndef _UNICODE
    #define _UNICODE
    #endif
    #endifTCHAR是个灵活性很强的东西,在UNICODE编码中,它被当作WCHAR,但在ANSI编码中,它又被当作CHAR:#ifdef UNICODE
    #define WCHAR TCHAR
    #else
    #define CHAR TCHAR
    #endif当你传参,如果从W版->A版,必须W2C(参数)再传递,反过来一样,经C2W(参数)再传递,否则,乱码。
      

  11.   

    WIN2000起,内核都使用UNICODE编码了,所以,现在的WINDOWS编程基本上都是使用宽字符了。如果在编程过程中,统一使用UNICODE编码,就不会出现乱码的情况。如果确实需要实现W版和A版,实现上只需要实现W版就可以了。A版的实现接受CHAR参数,然后转换成WCHAR传递给W版函数来执行即可。#ifdef UNICODE
        #define test testW
    #else
        #define test testA
    #endifVOID testW(WCHAR *wszStr)
    {
        MessageBox(wszStr);
    }VOID testA(CHAR *szStr)
    {
        WCHAR *wszStr = C2W(szStr);
        testW(wszStr);
    }当然,你可以只写一个版本的函数:VOID test(TCHAR *szStr)
    {
        MessageBox(szStr);
    }这个时候,在UNICODE编码中,它被当作WCHAR,但在ANSI编码中,它又被当作CHAR。
    不过,当你把使用UNICODE和ANSI编译的组件共用时,就得非常小心,参数的传递必须经宽字符<=>多字节字符转换后再传递,否则乱码。
    当然,TCHAR是过度之用,不如直接使用WCHAR。