CListCtrl中的表头高度怎么动态设定?

wangbab 2003-08-20 04:57:07
我已经做到ListCtrl的Item行高可以动态设定。因为运行中的Item数量是变化的。我改变每个Item的高度使其能均匀分布。可是表头不能动态改变,造成表头与Item的高度不成比例,怎么办?
...全文
448 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangbab 2003-08-25
  • 打赏
  • 举报
回复
再顶
wangbab 2003-08-22
  • 打赏
  • 举报
回复
自己顶一下
serverclient 2003-08-21
  • 打赏
  • 举报
回复
呵呵,具体的Column显示问题你可以自己编写CHeaderCtrl,然后利用SubClass技术,在自己的CMyListCtrl的PreSubClassWindow中添加处理函数,或者干脆加一个InitHeader之类的东西,高度嘛,我原先重载了MeasureItem但是不可以。
最后用了一个土土的办法:改变CHeaderCtrl的字体比如CFont的CreatePointFont设定字体的高度的时候设定一下就可以了。

在CMyListCtrl中
CHeaderCtrl *pOriginalHeader = GetHeaderCtrl() ; //这个是CListCtrl的成员函数
VERIFY(m_customHeader.SubClassWindow(pOriginalHeader->m_hWnd) != NULL) ;
m_customHeader.SetFont(&m_highFont) ; //呵呵,这里做一个大的Font即可
现在这样应该就可以了。
然后自己重载CHeaderCtrl,重写它的OnPaint即可,注意此时,不要改变原有的Font,
否则Header就会变小:p,你可以自己创建一个临时的font然后画在内存DC上,然后利用Bitblt
向CPaintDC dc上贴图。
总之,这是一个土办法,后来我看MSDN上有什么SetColumn函数需要填写一个LVCOLUMN的结构体,应该也可以完成上述功能。我就是嫌它麻烦:)
Phourm 2003-08-21
  • 打赏
  • 举报
回复
简单办法 m_pListCtrl->GetHeaderCtrl()->SetFont(&font);
这个字体你建一个很大的就OK了,不过如果你想HEADER上的字小,位置大那还得自己继承CHeaderCtrl然后自己画HeaderCtrl
wangbab 2003-08-21
  • 打赏
  • 举报
回复
我试过MearureItem和DrawItem,都只能在控件初始化是改变高度(即第一次创建时),若在运行时改变表头行高就报错。
我参考的是www.codeguru.com上的一个例子。
wuxfBrave 2003-08-21
  • 打赏
  • 举报
回复
自己画控件试试看,重载MesaureItem和DrawItem
wangbab 2003-08-21
  • 打赏
  • 举报
回复
自己顶一下,求高手解答
wangbab 2003-08-21
  • 打赏
  • 举报
回复
serverclient(郁闷)
做一个大的Font不可行,高度很大时,字体太大了。
我用的MeasureItem,
void CMyListCtrl::MeasureItem ( LPMEASUREITEMSTRUCT lpMeasureItemStruct )
{
CRect rect;
GetClientRect(rect);
m_nDivX=rect.Width()/(m_nOutPortNumber+1);
m_nDivY=rect.Height()/(m_nInPortNumber+1);
//m_nDivX、m_nDivY分别为均分的宽、高。
lpMeasureItemStruct->itemHeight=m_nDivY;
lpMeasureItemStruct->itemWidth=m_nDivX;
}
void CMyListCtrl::ResetColumnIem()
{
删除所有列,所有条目。重新添加列,条目。
}
控件条目改变时,删除所有列、条目,重新加入条目和列。
比如在View中调用SetOutPortNumber()//设定控件的列数
CMyView::SetOutPortNumber(int nNew)
{
m_MyList.m_nOutPort=nNew;
m_MyList.ResetColumnItem();//重设所有条目,列。
}
以上可以满足动态改变行高和列高。

对于你说的重载CHeaderCtrl,利用SubClass,我也试过,可是运行时会出错。
Debug Assertion Failed!
Program ....
File:wincore.cpp
line:312
For information on how your program can cause an assertion
failure,see the Visual C++ documentation on asserts.

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧