zoukankan      html  css  js  c++  java
  • VC CListCtrl 第一列列宽自适应

    原文链接: 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();
    }

     

     

     

  • 相关阅读:
    1-5概率的公理化的定义
    1-4几何概型
    1-3古典概型
    求逆序对数量
    1-2事件的基本运算
    1001 害死人不偿命的(3n+1)猜想 (15 分)
    北京周末去哪儿 —— 国家博物馆
    北京周末去哪儿 —— 天安门广场
    angular中使用ckplayer播放器
    java MD5/AES/DES加解密汇总
  • 原文地址:https://www.cnblogs.com/huhu0013/p/4623143.html
Copyright © 2011-2022 走看看