1. ON_WM_CTLCOLOR_REFLECT
2. ON_WM_ERASEBKGND
3. ON_WM_PAINT
example:
HBRUSH CColorStatic::CtlColor(CDC* pDC, UINT nCtlColor)
{
pDC->SetBkMode(TRANSPARENT);
if(m_nPos != -1)
pDC->SetTextColor(DEF_TEXTCOLOR);
else
pDC->SetTextColor(m_TextColor);
return (HBRUSH)::GetStockObject(NULL_BRUSH);
}
BOOL CColorStatic::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
void CColorStatic::OnPaint()
{
CRect Rect;
CPaintDC dc(this);
TCHAR szText[1024];
CFont *pFont, *pOldFont;
int w1, w2;
GetWindowText(szText, sizeof(szText)/sizeof(TCHAR));
GetClientRect(Rect);
if(m_nPos == -1)
{
dc.FillSolidRect(0, 0, Rect.Width(), Rect.Height(), m_BackColor);
dc.SetTextColor(m_TextColor);
}
else
{
w1 = Rect.Width() * m_nPos / m_nPosMax;
w2 = Rect.Width() - w1;
dc.FillSolidRect(0, 0, w1, Rect.Height(), m_TextColor);
dc.FillSolidRect(w1, 0, w2, Rect.Height(), m_BackColor);
dc.SetTextColor(DEF_TEXTCOLOR);
}
dc.SetBkMode(TRANSPARENT);
pFont = GetFont();
pOldFont = dc.SelectObject(pFont);
dc.DrawText(szText, _tcslen(szText), Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
pOldFont = dc.SelectObject(pOldFont);
}