diff --git a/include/wx/msw/control.h b/include/wx/msw/control.h index 960c3a9948..74000ed3e2 100644 --- a/include/wx/msw/control.h +++ b/include/wx/msw/control.h @@ -120,18 +120,12 @@ protected: virtual WXHBRUSH MSWControlColor(WXHDC pDC); // 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); // call this from the derived class MSWControlColor() if you want to always // paint the background (as all opaque controls do) - WXHBRUSH MSWControlColorSolid(WXHDC pDC) - { - return MSWControlColorSolid(pDC, GetBackgroundColour()); - } - - // common part of the 3 methods above - WXHBRUSH MSWControlColorSolid(WXHDC pDC, wxColour colBg); + WXHBRUSH MSWControlColorSolid(WXHDC pDC, wxColour colBg = wxNullColour); // another WM_CTLCOLOR-related function: override this to return the brush // which should be used to paint the control background by default diff --git a/src/msw/control.cpp b/src/msw/control.cpp index d32372b29f..1561c9d470 100644 --- a/src/msw/control.cpp +++ b/src/msw/control.cpp @@ -337,34 +337,30 @@ WXHBRUSH wxControl::MSWControlColorSolid(WXHDC pDC, wxColour colBg) if ( m_hasFgCol ) { ::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() ) { - ::SetBkColor(hdc, wxColourToRGB(colBg)); - + // draw children with the same colour as the parent 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 hbr = MSWControlColorSolid(pDC, m_hasBgCol ? m_backgroundColour - : wxNullColour); - if ( hbr ) - return hbr; - ::SetBkMode((HDC)pDC, TRANSPARENT); - hbr = MSWGetBgBrush(pDC); - - return hbr ? hbr : MSWGetDefaultBgBrush(); + return MSWControlColorSolid(pDC); } WXHBRUSH wxControl::MSWControlColorDisabled(WXHDC pDC)