解决了CListCtrl控件当字体改变后,自动调整每行的宽度的问题.
2007-03-13 19:48
363 查看
void CReportCtrl::AutoSizeColumns()
{
bool bFitWidth=true;
ShowWindow(SW_HIDE);//避免闪烁
SetRedraw(FALSE);
//自动调整宽度
for(int k=0;k<GetColumnCount();k++)
{
// Call this after your list control is filled
if(!GetHeaderCtrl())
return;
if(!bFitWidth)//如果不自动调整最后一列宽度,使得总列宽等于控件宽度,
InsertColumn(GetColumnCount(),"");
int col=k;
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=CListCtrl::GetImageList(LVSIL_SMALL);
if(pImageList->GetSafeHandle())
{
pImageList->GetImageInfo(li.iImage,&ImageInfo);
nImgWidth=max(nImgWidth,ImageInfo.rcImage.right-ImageInfo.rcImage.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);
}
{
bool bFitWidth=true;
ShowWindow(SW_HIDE);//避免闪烁
SetRedraw(FALSE);
//自动调整宽度
for(int k=0;k<GetColumnCount();k++)
{
// Call this after your list control is filled
if(!GetHeaderCtrl())
return;
if(!bFitWidth)//如果不自动调整最后一列宽度,使得总列宽等于控件宽度,
InsertColumn(GetColumnCount(),"");
int col=k;
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=CListCtrl::GetImageList(LVSIL_SMALL);
if(pImageList->GetSafeHandle())
{
pImageList->GetImageInfo(li.iImage,&ImageInfo);
nImgWidth=max(nImgWidth,ImageInfo.rcImage.right-ImageInfo.rcImage.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);
}
相关文章推荐
- 解决 Chrome 浏览器自动调整小于11px字体的问题
- Android自定义TextView根据控件高度和宽度,解决字体适配问题
- 解决Android中ScrollView内的控件长度发生改变之后自动滚动的问题
- 常量,字段,构造方法 调试 ms 源代码 一个C#二维码图片识别的Demo 近期ASP.NET问题汇总及对应的解决办法 c# chart控件柱状图,改变柱子宽度 使用C#创建Windows服务 C#服务端判断客户端socket是否已断开的方法 线程 线程池 Task .NET 单元测试的利剑——模拟框架Moq
- 解决android中viewpager自动占满父控件的问题
- ScrollView内的控件改变之后自动滚动的问题
- 解决图片太大溢出问题、CSS 限制图片最大宽度、图片按比例自动缩放
- 解决系统改变字体大小的时候导致的界面布局混乱的问题
- ScrollView嵌套ListView,GridView,ViewPager,以及这些控件自动滚动到底部问题的解决
- 解决列表框更新数据的时候的闪烁问题(VC防止窗口及其控件(如CListCtrl)闪烁的简单方法(一组有用的宏) )
- 使用POI生成Excel文件,可以自动调整excel列宽遇到的问题及解决
- Android textview自适应宽度自动调整字体大小
- 表格的宽度点击后产生图标换行问题解决以及字体在手机中不正常显示
- 《WebBrowser》——— 可视区域设置,防止控件默认的自动缩小网页(可以解决加载html时字体先大后小)
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- 解决ubuntu linux下更新idea导致idea字体改变的问题
- 根据控件大小自动调整字体大小方法(C#)
- 解决表格自动换行问题:让表格宽度根据内容长度自动伸展
- Android控件——ListView——解决自动轮播跳转第一页流畅性问题
- 解决字体大小的改变影像显示对话框大小的问题