mfc下的listbox添加字符串的函数为AddString(LPCTSTR)
在自会的时候,如果使用GetText(),似乎得到的某一项的文本是乱码,
MSDN上的例子用的是
LPCTSTR szText = (LPCTSTR)lpDrawItemStruct->itemData;
这样可以得到正确的字符,但后来如果使用AddString来添加项目,显示的时候会是乱码,
经过调试,除非AddString的参数是个字符串常量(如_T(“”)),或者是个静态(局部的不行)的CString。
估计可能需要全局的数据。
而且GetText得到的将会是乱码,除非使用(LPCTSTR)GetItemData()才能得到正确的字符。
标准的LISTBOX却不会有这样的情况。listbox的内容经常需要根据需要而变,所以使用太多静态的很麻烦
在自会的时候,如果使用GetText(),似乎得到的某一项的文本是乱码,
MSDN上的例子用的是
LPCTSTR szText = (LPCTSTR)lpDrawItemStruct->itemData;
这样可以得到正确的字符,但后来如果使用AddString来添加项目,显示的时候会是乱码,
经过调试,除非AddString的参数是个字符串常量(如_T(“”)),或者是个静态(局部的不行)的CString。
估计可能需要全局的数据。
而且GetText得到的将会是乱码,除非使用(LPCTSTR)GetItemData()才能得到正确的字符。
标准的LISTBOX却不会有这样的情况。listbox的内容经常需要根据需要而变,所以使用太多静态的很麻烦
new一个足够大的内存 根本就不用删除 直接在里面改写内容就行了
最后退出再删除
AddString后要用lpDrawItemStruct->itemData来取得,又不是SetItemData,GetText()却不可以。
是不是哪里搞错了呢?
CListBox::GetText(lpDrawItemStruct->itemID, sText);我是这么用的,没发现有什么错误 给出你的代码看看
void XXXXX::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
int nCount = GetCount();
if(nCount == 0)
return ;
CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CString szText;
GetText(lpDrawItemStruct->itemID,szText);
CRect rc = lpDrawItemStruct->rcItem;
//....
}
DLg:
m_listBox2.AddString(L"mp4");
m_listBox2.SetItemHeight(0,20);这样只插了一项,但调试进去,发现szText是乱码。itemID确实还是0.
int n = GetTextLen( lpDrawItemStruct->itemID );
GetText( lpDrawItemStruct->itemID, str.GetBuffer(n) );
str.ReleaseBuffer();
就是觉得奇怪,怎么AddString的数据到了data里去了?
查了下控件的属性,HAS STRING为false,置true就可以用gettext取得了