我要将我的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多错误,请问我到底该怎么办啊
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多错误,请问我到底该怎么办啊
是不是在UNICODE上将LISTCTRL添加内容
结果字符出现了问题??
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是这样吗?
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】中这个函数的用法。
当使用Unicode时,其定义是:
#define _T(x) L ## x
当不使用Unicode时,其定义是:
#define _T(x) xCString类重载了LPCTSTR转换操作,当需要LPCTSTR类型参数时,你可以直接给CString类型参数。
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的转换 没有什么关系,不好意思
谢谢大家的帮忙!