1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
| //ColorStatic.cpp
#include "stdafx.h"
#include "ColorStatic.h"
CColorStatic::CColorStatic()
{
m_crTextClr = RGB(255,255,255);
m_crTextBk = RGB(0,0,0);
m_hbrColorBk = ::CreateSolidBrush(m_crTextBk);
}
CColorStatic::~CColorStatic()
{
::DeleteObject(m_hbrColorBk);
}
BEGIN_MESSAGE_MAP(CColorStatic, CStatic)
//{{AFX_MSG_MAP(CColorStatic)
ON_WM_CTLCOLOR_REFLECT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CColorStatic::SetBkColor(COLORREF clrCtlBk, COLORREF clrCtlText)
{
if(m_hWnd) Invalidate();
}
HBRUSH CColorStatic::CtlColor(CDC* pDC, UINT nCtlColor)
{
m_crTextClr = RGB(255,255,255);
m_crTextBk = RGB(0,0,0);
if (m_hbrColorBk) ::DeleteObject(m_hbrColorBk);
m_hbrColorBk = ::CreateSolidBrush(m_crTextBk);
pDC->SetTextColor(m_crTextClr);
pDC->SetBkMode(TRANSPARENT);
return m_hbrColorBk;
}
BOOL CColorStatic::OnChildNotify( UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pLResult )
{
// interception du message reflect
if(message >= WM_CTLCOLORMSGBOX && message <= WM_CTLCOLORSTATIC)
{
UINT nCtlType = message - WM_CTLCOLORMSGBOX;
ASSERT(nCtlType >= CTLCOLOR_MSGBOX);
ASSERT(nCtlType <= CTLCOLOR_STATIC);
CDC dcTemp; dcTemp.m_hDC = (HDC)wParam;
HBRUSH hbr = CtlColor(&dcTemp, nCtlType);
// fast detach of temporary objects
dcTemp.m_hDC = NULL;
*pLResult = (LRESULT)hbr;
return TRUE;
}
return CStatic::OnChildNotify( message,wParam, lParam,pLResult );
} |
Partager