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

我找了好多方法。但不就是用不了。我不知道哪里出了问题。方法1继承一个CHeaderCtrl的类,重载OnDrawItem,这里面绘制什么都可以然后在把这个类的实例和一个l... 我找了好多方法。但不就是用不了。我不知道哪里出了问题。
方法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)本人必有重谢!!!
展开
 我来答
兵戈战戟
2008-07-29 · 超过42用户采纳过TA的回答
知道小有建树答主
回答量:196
采纳率:100%
帮助的人:0
展开全部
其实方法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); //填充背景
_brush.DeleteObject(); //释放画刷
R-=3;G-=3;B-=3;
nRect.top = nRect.bottom;
}
dc.SetBkMode(TRANSPARENT);
tRect.top+=2;
CFont nFont ,* nOldFont;
dc.SetTextColor(RGB(50,50,50));
nFont.CreateFont(15,0,0,0,0,FALSE,FALSE,0,0,0,0,0,0,_TEXT("Times New Roman"));//创建字体
nOldFont = dc.SelectObject(&nFont);
dc.DrawText(szChar[i],&tRect,DT_CENTER);
dc.SelectObject(nOldFont);
nFont.DeleteObject(); //释放字体

}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式