for()
{
   listctrl input item
}
//自动列宽
int nColumnCount = pList->GetHeaderCtrl()->GetItemCount();
for (int i = 0; i < nColumnCount; i++)
{
pList->SetColumnWidth(i, LVSCW_AUTOSIZE);
int nColumnWidth = pList->GetColumnWidth(i);
pList->SetColumnWidth(i, LVSCW_AUTOSIZE_USEHEADER);
int nHeaderWidth = pList->GetColumnWidth(i); 
pList->SetColumnWidth(i, max(nColumnWidth, nHeaderWidth));
}通过调用以上代码,可以实现,listctrl的自动列宽。但是考虑到有时候数据量较大,需要利用listctrl的虚表,这跟上面所写的传统数据插入做法有异
此时,如果再调用上面的程序,就会卡住(估计死循环),即便写pList->SetColumnWidth(pItem->iSubItem, 100);
数据显示的速度又很慢,几乎是一列一列地赋值。因此,我想知道是否有什么方法,既可以实现自动列宽,又可以让数据快速显示呢,多谢!

解决方案 »

  1.   

    CListCtrl我有一个封装类 功能多了 
      

  2.   

    哦??能给我发一个吗,谢谢
    [email protected]
      

  3.   

     有两种方法:
    1、数据分页加载到ListCtrl中,不要一次性将全部数据插入到ListCtrl中,比如每页显示50条。
    2、用变量保存每一列中各Item的最大宽度,每次Insert一个Item后先计算各SubItem的宽度,如果比原先的大则调整宽度,并记录此值。
      

  4.   

    可以到codeproject上找找,很多的
      

  5.   

    listctrl的自动列宽楼主的意思应该是由数据内容决定列宽吧可以添加函数AdjustColumn(int nCol)先通过计算当前屏 nCol列的所有数据的最宽宽度(pDC->GetExtent(String))获得宽度width,然后SetWidth(nCol,width)另加函数Refresh()
    {
    list.SetRedraw(FALSE);
    nCount=gethead.getcount;
    while(nCount--)
      AdjustColumn(nCount);
    list.SetRedraw(TRUE);
    }每次OnScroll时调用Refresh() 就OK 了