首页 > 其他 > 详细

VC CListCtrl 第一列列宽自适应

时间:2015-07-05 23:43:59      阅读:433      评论:0      收藏:0      [点我收藏+]

 

原文链接: http://www.cnblogs.com/sephil/archive/2011/04/03/2004384.html

今天用VC写工具的时候用到CListView,并且ListCtrl的第一列需要自动拉伸,以占满空白区域

Delphi做这个设置是很容易的,只要将Column的AutoSize设置为True就可以了

不过VC/SDK的AutoSize其实是根据Item的文本长度来自动设置Column Width,跟我的要求不符,只好自己实现了

其实很简单,就是觉得麻烦...

 


void CMyView::AdjustColumnWidth()
{
RECT rc;
CListCtrl& list = GetListCtrl();
CHeaderCtrl* pHeader = list.GetHeaderCtrl();
if (!pHeader)
return;

// 客户区域
list.GetClientRect(&rc);
int nColCount = pHeader->GetItemCount();
// 去掉其他列占用的宽度
for (int i = 1; i < nColCount; i++)
{
rc.right -= list.GetColumnWidth(i);
}

// 去掉滚动条占用的宽度
SCROLLBARINFO sbi;
if (list.GetScrollBarInfo(OBJID_VSCROLL, &sbi))
{
rc.right -= sbi.rcScrollBar.right - sbi.rcScrollBar.left;
}

// 修改列宽
list.SetColumnWidth(0, rc.right > rc.left ? rc.right - rc.left : LVSCW_AUTOSIZE_USEHEADER);
}

 

使用方法:在OnSize消息中调用一下AdjustColumnWidth就好了

void CMyView::OnSize(UINT nType, int cx, int cy)
{
CListView::OnSize(nType, cx, cy);

if (GetListCtrl().GetSafeHwnd())
  AdjustColumnWidth();
}

 

 

 

VC CListCtrl 第一列列宽自适应

原文:http://www.cnblogs.com/huhu0013/p/4623143.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!