X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e2c49e5cd2b7092e946fd97d76f3cca07916c91c..38c58c778d8f8b0abf889e787e0364d42c1c445f:/src/msw/window.cpp diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 8c7b93ca62..70f74831c8 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -333,6 +333,7 @@ wxCONSTRUCTOR_DUMMY(wxWindow) BEGIN_EVENT_TABLE(wxWindowMSW, wxWindowBase) EVT_SYS_COLOUR_CHANGED(wxWindowMSW::OnSysColourChanged) + EVT_ERASE_BACKGROUND(wxWindowMSW::OnEraseBackground) #ifdef __WXWINCE__ EVT_INIT_DIALOG(wxWindowMSW::OnInitDialog) #endif @@ -4067,6 +4068,47 @@ bool wxWindowMSW::HandleEraseBkgnd(WXHDC hdc) return rc; } +void wxWindowMSW::OnEraseBackground(wxEraseEvent& event) +{ + if ( GetBackgroundStyle() == wxBG_STYLE_CUSTOM ) + { + // don't skip the event here, custom background means that the app is + // drawing it itself in its OnPaint() + return; + } + + if ( !m_hasBgCol ) + { + event.Skip(); + return; + } + + // we have a fixed solid background colour, do use it + RECT rect; + ::GetClientRect(GetHwnd(), &rect); + + wxColour backgroundColour(GetBackgroundColour()); + COLORREF ref = PALETTERGB(backgroundColour.Red(), + backgroundColour.Green(), + backgroundColour.Blue()); + HBRUSH hBrush = ::CreateSolidBrush(ref); + if ( !hBrush ) + wxLogLastError(wxT("CreateSolidBrush")); + + HDC hdc = (HDC)event.GetDC()->GetHDC(); + +#ifndef __WXWINCE__ + int mode = ::SetMapMode(hdc, MM_TEXT); +#endif + + ::FillRect(hdc, &rect, hBrush); + ::DeleteObject(hBrush); + +#ifndef __WXWINCE__ + ::SetMapMode(hdc, mode); +#endif +} + // --------------------------------------------------------------------------- // moving and resizing // ---------------------------------------------------------------------------