精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>WINDOWS界面设计>>自动调整ListCtrl的列的宽度

主题:自动调整ListCtrl的列的宽度
发信人: jiangsheng()
整理人: wenbobo(2002-12-27 15:57:42), 站内信件
void CSortListCtrl::AutoSizeColumns(int col /*=-1*/,BOOL bFitWidth/*=F

ALSE*/) 
{
 // Call this after your list control is filled
if(!GetHeaderCtrl())return;
ShowWindow(SW_HIDE);//避免闪烁
SetRedraw(FALSE);
if(!bFitWidth)//如果不自动调整最后一列宽度,使得总列宽等于控件宽度,


InsertColumn(GetColumnCount(),"");
int mincol = col < 0 ? 0 : col;
int maxcol = col < 0 ? GetColumnCount()-1 : col;

for (col = mincol; col <= maxcol; col++) {
SetColumnWidth(col,LVSCW_AUTOSIZE);
int wc1 = GetColumnWidth(col);
SetColumnWidth(col,LVSCW_AUTOSIZE_USEHEADER);
int wc2 = GetColumnWidth(col);
int iFrom=GetTopIndex();
int nCountPerpage=GetCountPerPage();
if(nCountPerpage<=0)
nCountPerpage=GetItemCount();
int iTo=iFrom+nCountPerpage;
int nImgWidth=0;
int iIndent=0;
LVITEM li;
li.mask=LVIF_IMAGE|LVIF_INDENT;
IMAGEINFO ImageInfo;
for(int iItem=iFrom;iItem<iTo;iItem++){
li.iItem=iItem;
GetItem(&li);
iIndent=max(li.iIndent,iIndent);
if(li.iImage!=-1){
CImageList* pImageList=GetImageList(LVSIL_SMALL);
if(pImageList->GetSafeHandle()){
pImageList->GetImageInfo(li.iImage,&ImageInfo);
nImgWidth=max(nImgWidth,ImageInfo.rcImage.right-ImageInfo.rcImag

e.left);
}
}
}
int wc = max(20,max(wc1,wc2));
if(col==0)
wc+=nImgWidth*(iIndent+1);
else
wc+=nImgWidth;
SetColumnWidth(col,wc);
}
if(!bFitWidth)
DeleteColumn(GetColumnCount()-1);
SetRedraw(TRUE);
ShowWindow(SW_SHOW);
}


--
HE WHO CONTROLS THE PAST, COMMANDS THE FUTURE.
HE WHO CONTROLS THE FUTURE CONQUERS THE PAST.

※ 修改:.jiangsheng 于 Sep  8 23:37:25 修改本文.[FROM: 202.96.44.196]
※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.44.196]

[关闭][返回]