关于CListCtrl条目的字符数限制

王朝vc·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

这几天写个程序,用到ListCtrl,当对其中进行长字符串写入时发现,只能写很少一点(好像是128),

于是干脆重载了ListCtrl,

并且重载了函数SetIteText

BOOL CMyListCtrl::SetItemText(int nItem, int nSubItem, LPCTSTR lpszText)//

{

ASSERT(::IsWindow(m_hWnd));

ASSERT((GetStyle() & LVS_OWNERDATA)==0);

LVITEM lvi;

lvi.iSubItem = nSubItem;

lvi.pszText = (LPTSTR)lpszText;

::SendMessage(m_hWnd, LVM_SETITEMTEXT, nItem, (LPARAM)&lvi);

return (BOOL) ::SendMessage(m_hWnd, LVM_SETITEMTEXT, nItem, (LPARAM)&lvi);

}

原来以为是lvi. cchTextMax;长度太小,所以特意设了个,但发现没用.

因为,从ListCtrl中读取的文字还是不是写入的.

突然想到,是不是获取文本时出了问题,

然后打开了GetItemText 一看,果然.

默认的长度竟然只有128位

重载之,搞定:

CString CMyListCtrl::GetItemText(int nItem, int nSubItem)

{

ASSERT(::IsWindow(m_hWnd));

LVITEM lvi;

memset(&lvi, 0, sizeof(LVITEM));

lvi.iSubItem = nSubItem;

CString str;

int nLen = 640;//重载该函数,默认为128,这里改为640

int nRes;

do

{

nLen *= 2;

lvi.cchTextMax = nLen;

lvi.pszText = str.GetBufferSetLength(nLen);

nRes = (int)::SendMessage(m_hWnd, LVM_GETITEMTEXT, (WPARAM)nItem,

(LPARAM)&lvi);

} while (nRes == nLen-1);

str.ReleaseBuffer();

return str;

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航