diff --git a/include/wx/msw/window.h b/include/wx/msw/window.h index 56d65c055b..d0a8877e37 100644 --- a/include/wx/msw/window.h +++ b/include/wx/msw/window.h @@ -166,8 +166,9 @@ public: // -------------- void OnPaint(wxPaintEvent& event); + void OnEraseBackground(wxEraseEvent& event); #ifdef __WXWINCE__ - void OnInitDialog( wxInitDialogEvent& event ); + void OnInitDialog(wxInitDialogEvent& event); #endif public: diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 8c7b93ca62..49c4a6c7c2 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,40 @@ bool wxWindowMSW::HandleEraseBkgnd(WXHDC hdc) return rc; } +void wxWindowMSW::OnEraseBackground(wxEraseEvent& event) +{ + 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 // ---------------------------------------------------------------------------