我要将我的LISTCTRL中插入行代码如下:
int nCount = m_list.GetItemCount();      
CString   Item0,Item1; //现在它们的内容是可变的,不是固定的值,我想将它们的值放进m_list
m_list.SetItem(nCount,0,LVIF_TEXT|LVIF_IMAGE,_T(""),0,NULL,NULL,  0);
m_list.SetItem( nCount,1,LVIF_TEXT|LVIF_IMAGE,_T(Item0),-1,NULL,NULL,  0);
m_list.SetItem( nCount,2,LVIF_TEXT|LVIF_IMAGE,_T(Item1),-1,NULL,NULL,  0);
这样写人家告诉我是不行的 ,因为unicode到Cstring需要转换,所以我又改成
USES_CONVERSION;       
CString   str1   =  A2W(Item0);
CString   str2   =  A2W(Item0);
 m_list.SetItem(nCount,0,LVIF_TEXT|LVIF_IMAGE,_T(""),0,NULL,NULL,  0);
m_list.SetItem( nCount,1,LVIF_TEXT|LVIF_IMAGE,_T(str1),-1,NULL,NULL,  0);
m_list.SetItem( nCount,2,LVIF_TEXT|LVIF_IMAGE,_T(str2),-1,NULL,NULL,  0);
可这样还是不行,提示USES_CONVERSION'和A2W没定义 ,
现在人家又告诉我在Project->Settings里选择"C/C++",将预定义里的_MBCS去掉,添加上"UNICODE,_UNICODE"的定义,我改了以后,一编译,200多错误,请问我到底该怎么办啊

解决方案 »

  1.   

    你到底要做什么啊?
    是不是在UNICODE上将LISTCTRL添加内容
    结果字符出现了问题??
      

  2.   

    前面的代码都是对的,但是不要用_T(Item0)这样,直接用Item0放在那里就可以了,CString自己会处理代码转换。
      

  3.   

    我在Dialog界面上有一个LISTCTRL,我把它加上图标了,可是人家说加上图标以后,在插入数据的时候,得用SetItem  我就是要将数据插入到LISTCTRL里
      

  4.   

    int   nCount   =   m_list.GetItemCount();             
    CString       Item0,Item1; //现在它们的内容是可变的,不是固定的值,我想将它们的值放进m_list 
    m_list.SetItem(nCount,0,LVIF_TEXT ¦LVIF_IMAGE,_T(""),0,NULL,NULL,     0); 
    m_list.SetItem(   nCount,1,LVIF_TEXT ¦LVIF_IMAGE,Item0,-1,NULL,NULL,     0); 
    m_list.SetItem(   nCount,2,LVIF_TEXT ¦LVIF_IMAGE,Item1,-1,NULL,NULL,     0); 
    Mackz是这样吗?
      

  5.   

        WCHAR uData[] = L"I服了you!";    char * buffer;    int nLength = 0;    // 第一次调用,获取需要的字节数
        nLength = WideCharToMultiByte(CP_ACP,NULL,uData,-1,NULL,0,NULL,NULL);    // 申请 char 缓冲区
        buffer = (char*)malloc(nLength);    // 第二次调用,真正转换
        WideCharToMultiByte(CP_ACP,NULL,uData,-1,buffer,nLength,NULL,NULL);    MessageBox(buffer);    // 释放缓冲区
        free(buffer);
    说明: 为什么用【L"I服了you!"】做测试,是有道理的。 非UNICODE环境中,汉字本身就占用2个字节,这与在UNICODE环境中是一样的; 而英文字母在两种环境中占用的字节数是不一样的。 注意函数中【-1】的用法,详细信息需要查看【MSDN】中这个函数的用法。
      

  6.   

    像2楼这样做LISTCTRL一点显示都没有
      

  7.   

    为什么用【L"I服了you!"】做测试,是有道理的??呵呵
      

  8.   

    插入行要使用m_list.InsertItem(...);
      

  9.   

    可是我的是CString类型的变量啊  又不是 WCHAR 型的,不一样啊
      

  10.   

    同2楼,把上面代码中的_T()去掉即可。_T()是用于定义字符串的一个宏,不是函数。
    当使用Unicode时,其定义是:
    #define _T(x) L ## x
    当不使用Unicode时,其定义是:
    #define _T(x) xCString类重载了LPCTSTR转换操作,当需要LPCTSTR类型参数时,你可以直接给CString类型参数。
      

  11.   

    有人说,至尊宝写的是widechar到MutiByte,应该是MultiByte到WideChar ,是这样吗?
      

  12.   

    可是用2楼的方法我的LISTCTRL没有数据显示啊
      

  13.   

    _T() TEXT() 等转换宏只能直接在字符串上CString 可以做到 AU编码自适应的
      

  14.   

    不好意思,2楼的方法可以,只是我写错了插入语句,应该这样写就对了
    m_list.InsertItem(nCount,_T(""),0);
    m_list.SetItem( nCount,1,LVIF_TEXT|LVIF_IMAGE,Item0,,-1,NULL,NULL,  0);
    m_list.SetItem( nCount,2,LVIF_TEXT|LVIF_IMAGE,Item1,-1,NULL,NULL,  0);
    好像和那个unicode到Cstring的转换 没有什么关系,不好意思
    谢谢大家的帮忙!
      

  15.   

    <<Windows核心编程>>第2章