這幾天寫(xiě)個(gè)程序,用到ListCtrl,當(dāng)對(duì)其中進(jìn)行長(zhǎng)字符串寫(xiě)入時(shí)發(fā)現(xiàn),只能寫(xiě)很少一點(diǎn)(好像是128),
于是干脆重載了ListCtrl,
并且重載了函數(shù)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);
}
原來(lái)以為是lvi. cchTextMax;長(zhǎng)度太小,所以特意設(shè)了個(gè),但發(fā)現(xiàn)沒(méi)用.
因?yàn)?從ListCtrl中讀取的文字還是不是寫(xiě)入的.
突然想到,是不是獲取文本時(shí)出了問(wèn)題,
然后打開(kāi)了GetItemText 一看,果然.
默認(rèn)的長(zhǎng)度竟然只有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;//重載該函數(shù),默認(rèn)為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;
}
