VC CListCtrl 第一列列宽自适应

本文介绍如何在VC中实现CListView的第一列自动拉伸以填充剩余空间的方法。通过调整列宽使得第一列能够自动扩展,从而适应窗口大小的变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天用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();
}

 

转载于:https://www.cnblogs.com/sephil/archive/2011/04/03/2004384.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值