CListCtrl每列默认最多只能显示260个字符,用以下方法可以扩展。
(1)重载虚函数DrawItem
virtual void DrawItem( LPDRAWITEMSTRUCT lpDrawItemStruct );
void CListCtrlTip::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC* pDC = CDC::FromHandle(lpDrawItemStruct-> hDC);
CRect rcItem(lpDrawItemStruct-> rcItem);
int nItem = lpDrawItemStruct-> itemID;
COLORREF clrTextSave, clrBkSave;
static _TCHAR szBuff[1024];//这里是你要显示的字符串长度,想多长有多长
LV_ITEM lvi;
lvi.mask = LVIF_TEXT | LVIF_STATE;//LVIF_IMAGE |
lvi.iItem = nItem;
lvi.iSubItem = 0;
lvi.pszText = szBuff;
lvi.cchTextMax = sizeof(szBuff);
lvi.stateMask = 0xFFFF;
GetItem(&lvi);
BOOL bSelected = (lvi.state & LVIS_SELECTED);
CRect rcAllLabels;
GetItemRect(nItem, rcAllLabels, LVIR_BOUNDS);
if (bSelected)
{
clrTextSave = pDC-> SetTextColor(::GetSysColor(COLOR_HIGHLIGHTTEXT));
clrBkSave = pDC-> SetBkColor(::GetSysColor(COLOR_HIGHLIGHT));
pDC-> FillRect(rcAllLabels, &CBrush(::GetSysColor(COLOR_HIGHLIGHT)));
}
else
{
clrTextSave = pDC-> SetTextColor(::GetSysColor(COLOR_WINDOWTEXT));
clrBkSave = pDC-> SetBkColor(::GetSysColor(COLOR_WINDOW));
pDC-> FillRect(rcAllLabels, &CBrush(::GetSysColor(COLOR_WINDOW)));
}
GetItemRect(nItem, rcItem, LVIR_LABEL);
pDC-> DrawText(szBuff,-1,rcItem,DT_LEFT | DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP | DT_VCENTER | DT_END_ELLIPSIS);
LV_COLUMN lvc;
lvc.mask = LVCF_FMT | LVCF_WIDTH;
for(int nColumn = 1; GetColumn(nColumn, &lvc); nColumn++)
{
rcItem.left = rcItem.right;
rcItem.right += lvc.cx;
int nRetLen = GetItemText(nItem, nColumn,
szBuff, sizeof(szBuff));
if (nRetLen == 0)
continue;
UINT nJustify = DT_LEFT;
switch(lvc.fmt & LVCFMT_JUSTIFYMASK)
{
case LVCFMT_RIGHT:
nJustify = DT_RIGHT;
break;
case LVCFMT_CENTER:
nJustify = DT_CENTER;
break;
default:
break;
}
pDC-> DrawText(szBuff, -1, rcItem,
nJustify | DT_SINGLELINE | DT_NOPREFIX | DT_NOCLIP | DT_VCENTER | DT_END_ELLIPSIS);// DT_END_ELLIPSIS可以实现文字显示不开后的...效果
}
if (lvi.state & LVIS_FOCUSED)
pDC-> DrawFocusRect(rcAllLabels);
if (bSelected)
{
pDC-> SetTextColor(clrTextSave);
pDC-> SetBkColor(clrBkSave);
}
}
(2) 控件设置属性Owner Draw Fixed
也可以动态设置Owner Draw Fixed属性:ModifyStyle(0, LVS_OWNERDRAWFIXED); 用SetExtendedStyle是不管用的。
改变CListCtrl列的最大文字长度
最新推荐文章于 2021-02-06 16:02:52 发布