关于如何改变ClistCtrl的标题栏的颜色
关于如何改变ClistCtrl的标题栏的颜色
在网上找此资料 ,如下 但颜色没变。不知为什么。
CColorHeaderCtrl * p = new CColorHeaderCtrl;
p->SubclassWindow(l.GetHeaderCtrl()->GetSafeHwnd());
调试时CColorHeaderCtrl::OnCustomDraw 也执行了。
// ColorHeaderCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "../../resource.h"
#include "ColorHeaderCtrl.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//---------------------------------------------------------------------------
//
// CColorHeaderCtrl
//
//---------------------------------------------------------------------------
CColorHeaderCtrl::CColorHeaderCtrl()
{
}
CColorHeaderCtrl::~CColorHeaderCtrl()
{
}
BEGIN_MESSAGE_MAP(CColorHeaderCtrl, CHeaderCtrl)
//{{AFX_MSG_MAP(CColorHeaderCtrl)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomDraw)
ON_WM_ERASEBKGND()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//---------------------------------------------------------------------------
//
// CColorHeaderCtrl message handlers
//
//---------------------------------------------------------------------------
// CColorHeaderCtrl::OnCustomDraw
//
// Handles custom draw
//
void CColorHeaderCtrl::OnCustomDraw(NMHDR* pNMHDR, LRESULT* pResult)
{
NMCUSTOMDRAW* pCD = (NMCUSTOMDRAW*)pNMHDR;
DWORD dwDrawStage,
dwItemSpec;
*pResult = CDRF_DODEFAULT;
dwDrawStage = pCD->dwDrawStage;
dwItemSpec = pCD->dwItemSpec;
if(dwDrawStage == CDDS_PREPAINT)
{
*pResult = CDRF_NOTIFYITEMDRAW;
}
else if(dwDrawStage == CDDS_ITEMPREPAINT)
{
HDC hDC = pCD->hdc;
SetTextColor(hDC, RGB(255, 255, 255));
if(dwItemSpec)
SetBkColor(hDC, RGB( 0, 0, 255)); // Blue
else
SetBkColor(hDC, RGB( 255, 0, 0)); // Red
*pResult = CDRF_NEWFONT;
}
}
// CColorHeaderCtrl::OnEraseBkgnd
//
// This is where we specify the background color of the header
//
BOOL CColorHeaderCtrl::OnEraseBkgnd(CDC* pDC)
{
CRect rc;
GetClientRect(&rc);
pDC->FillSolidRect(&rc, RGB(255, 255, 0)); // Yellow
return TRUE;
}