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

2025-04-29 14:45:22
推荐回答(1个)
回答1:

其实方法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 {
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(); //释放字体

}
}