这几天写个程序,用到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;
}
|