fixed background appearance for the controls with changed foreground colour

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@31069 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2004-12-19 20:15:43 +00:00
parent eb96212b6c
commit d1a47dfe23
2 changed files with 12 additions and 22 deletions

View File

@@ -120,18 +120,12 @@ protected:
virtual WXHBRUSH MSWControlColor(WXHDC pDC); virtual WXHBRUSH MSWControlColor(WXHDC pDC);
// call this from the derived class MSWControlColor() if you want to show // call this from the derived class MSWControlColor() if you want to show
// the control greyed out // the control greyed out (and opaque)
WXHBRUSH MSWControlColorDisabled(WXHDC pDC); WXHBRUSH MSWControlColorDisabled(WXHDC pDC);
// call this from the derived class MSWControlColor() if you want to always // call this from the derived class MSWControlColor() if you want to always
// paint the background (as all opaque controls do) // paint the background (as all opaque controls do)
WXHBRUSH MSWControlColorSolid(WXHDC pDC) WXHBRUSH MSWControlColorSolid(WXHDC pDC, wxColour colBg = wxNullColour);
{
return MSWControlColorSolid(pDC, GetBackgroundColour());
}
// common part of the 3 methods above
WXHBRUSH MSWControlColorSolid(WXHDC pDC, wxColour colBg);
// another WM_CTLCOLOR-related function: override this to return the brush // another WM_CTLCOLOR-related function: override this to return the brush
// which should be used to paint the control background by default // which should be used to paint the control background by default

View File

@@ -337,34 +337,30 @@ WXHBRUSH wxControl::MSWControlColorSolid(WXHDC pDC, wxColour colBg)
if ( m_hasFgCol ) if ( m_hasFgCol )
{ {
::SetTextColor(hdc, wxColourToRGB(GetForegroundColour())); ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour()));
if ( !colBg.Ok() )
colBg = GetBackgroundColour();
} }
// use the background colour override if a valid colour is given
WXHBRUSH hbr;
if ( colBg.Ok() ) if ( colBg.Ok() )
{ {
::SetBkColor(hdc, wxColourToRGB(colBg)); // draw children with the same colour as the parent
wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBg, wxSOLID); wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBg, wxSOLID);
return (WXHBRUSH)brush->GetResourceHandle(); hbr = (WXHBRUSH)brush->GetResourceHandle();
}
else // use our own background colour and recurse upwards if necessary
{
hbr = MSWGetBgBrush(pDC);
} }
return 0; return hbr;
} }
WXHBRUSH wxControl::MSWControlColor(WXHDC pDC) WXHBRUSH wxControl::MSWControlColor(WXHDC pDC)
{ {
WXHBRUSH hbr = MSWControlColorSolid(pDC, m_hasBgCol ? m_backgroundColour
: wxNullColour);
if ( hbr )
return hbr;
::SetBkMode((HDC)pDC, TRANSPARENT); ::SetBkMode((HDC)pDC, TRANSPARENT);
hbr = MSWGetBgBrush(pDC); return MSWControlColorSolid(pDC);
return hbr ? hbr : MSWGetDefaultBgBrush();
} }
WXHBRUSH wxControl::MSWControlColorDisabled(WXHDC pDC) WXHBRUSH wxControl::MSWControlColorDisabled(WXHDC pDC)