如何改变ClistCtrl的标题栏的颜色(高分重谢!)

来源:百度知道 编辑:UC知道 时间:2024/06/05 07:49:03
我找了好多方法。但不就是用不了。我不知道哪里出了问题。
方法1 继承一个CHeaderCtrl的类, 重载OnDrawItem,这里面绘制什么都可以 然后在把这个类的实例和一个listctrl联系起来
方法2 从CListCtrl和CHeaderCtrl分别派生出自己的类CMyListCtrl和CMyHeaderCtrl。 改写CHeaderCtrl默认的绘制函数OnPaint(),在CMyHeaderCtrl::OnPaint()函数中你可以把HeaderCtrl绘制成你想要的样子。 在CMyListCtrl中,我们声明一个CMyHeaderCtrl的类成员,并override函数CMyListCtrl::PreSubclassWindow()。
方法3 我还问过公司一个牛人 他告诉我要重构 CMyListCtrl。
但是,不知道怎么回事怎么也不行。
[b][/b]有人能给我具体讲讲过程吗?或给我一个实际的例子!(我的邮箱:jxxjzzh@hotmail.com)本人必有重谢!!!

其实方法1 ,就可以,不过,你要修改CHeaderCtrl的风格为WS_OWNERDRAW,这样它才能使用DrawItem,注意是DrawItem虚拟函数,而不是OnDrawItem消息响应函数

不过下面这个例子使用OnPaint()实现的
oid CMyHeaderCtrl::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 在此处添加消息处理程序代码
// 不为绘图消息调用 CHeaderCtrl::OnPaint()
// TODO: Add your message handler code here
int nItem;
nItem = GetItemCount();//得到有几个单元

TCHAR * szChar[4] = {_TEXT("标题1"),_TEXT("标题2"),
_TEXT("标题三"),_TEXT("标题四")};
for(int i = 0; i<nItem ;i ++)
{
CRect tRect;
GetItemRect(i,&tRect);//得到Item的尺寸
int R=171,G=199,B=235;//起始色素RGB
CRect nRect(tRect);//拷贝尺寸到新的容器中
nRect.left++;//留出分割线的地方
//绘制立体背景
for(int j = tRect.top;j<=tRect.bottom;j++)
{
nRect.bottom = nRect.top+1;
CBrush _brush;
_brush.CreateSolidBrush(RGB(R,G,B));//创建画刷
dc.FillRect(&nRect,&_brush); //填