X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/52c5093f76e534ec1a39f9f88a9b510b7cf3dbf2..078a94e00d4922cadb7682c38add735865c6c1b5:/src/msw/control.cpp?ds=inline diff --git a/src/msw/control.cpp b/src/msw/control.cpp index cab5151e1c..46854f5c23 100644 --- a/src/msw/control.cpp +++ b/src/msw/control.cpp @@ -375,10 +375,6 @@ bool wxControl::MSWOnNotify(int idCtrl, WXHBRUSH wxControl::DoMSWControlColor(WXHDC pDC, wxColour colBg, WXHWND hWnd) { HDC hdc = (HDC)pDC; - if ( m_hasFgCol ) - { - ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour())); - } WXHBRUSH hbr = 0; if ( !colBg.Ok() ) @@ -392,22 +388,34 @@ WXHBRUSH wxControl::DoMSWControlColor(WXHDC pDC, wxColour colBg, WXHWND hWnd) colBg = GetBackgroundColour(); } - // use the background colour override if a valid colour is given + // use the background colour override if a valid colour is given: this is + // used when the control is disabled to grey it out and also if colBg was + // set just above if ( colBg.Ok() ) { - ::SetBkColor(hdc, wxColourToRGB(colBg)); - - // draw children with the same colour as the parent wxBrush *brush = wxTheBrushList->FindOrCreateBrush(colBg); hbr = (WXHBRUSH)brush->GetResourceHandle(); } - // if we use custom background, we should set foreground ourselves too - if ( hbr && !m_hasFgCol ) + // always set the foreground colour if we changed the background, whether + // m_hasFgCol is true or not: if it true, we must do it, of course, but + // even if it isn't, we must set the default foreground explicitly as by + // default just the simple black is used + if ( hbr ) + { + ::SetTextColor(hdc, wxColourToRGB(GetForegroundColour())); + } + + // finally also set the background colour for text drawing: without this, + // the text in an edit control is drawn using the default background even + // if we return a valid brush + if ( colBg.IsOk() || m_hasBgCol ) { - ::SetTextColor(hdc, ::GetSysColor(COLOR_WINDOWTEXT)); + if ( !colBg.IsOk() ) + colBg = GetBackgroundColour(); + + ::SetBkColor(hdc, wxColourToRGB(colBg)); } - //else: already set above return hbr; }