改变CListCtrl列的最大文字长度

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是不管用的。 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值