From: Dimitri Schoolwerth Date: Wed, 2 May 2012 14:44:45 +0000 (+0000) Subject: Fixed parts of toolbar background not being drawn with older comctl32.dll. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/ae580de3763c475c61cf3200692ae7fecfb42d62 Fixed parts of toolbar background not being drawn with older comctl32.dll. When using comctl32.dll versions older than 6.0 toolbar icons would not have their background drawn. Fix this in a rough way by always completely erasing the background like was done before. Regression since r62971. Closes #13512. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@71341 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/msw/toolbar.h b/include/wx/msw/toolbar.h index fcfbec774b..bf02037ca3 100644 --- a/include/wx/msw/toolbar.h +++ b/include/wx/msw/toolbar.h @@ -67,6 +67,7 @@ public: void OnMouseEvent(wxMouseEvent& event); void OnSysColourChanged(wxSysColourChangedEvent& event); + void OnEraseBackground(wxEraseEvent& event); void SetFocus() {} diff --git a/src/msw/toolbar.cpp b/src/msw/toolbar.cpp index 4866b30c54..697b9c6c8d 100644 --- a/src/msw/toolbar.cpp +++ b/src/msw/toolbar.cpp @@ -127,6 +127,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxToolBar, wxControl) BEGIN_EVENT_TABLE(wxToolBar, wxToolBarBase) EVT_MOUSE_EVENTS(wxToolBar::OnMouseEvent) EVT_SYS_COLOUR_CHANGED(wxToolBar::OnSysColourChanged) + EVT_ERASE_BACKGROUND(wxToolBar::OnEraseBackground) END_EVENT_TABLE() // ---------------------------------------------------------------------------- @@ -340,7 +341,10 @@ bool wxToolBar::Create(wxWindow *parent, // in WM_ERASEBKGND too (by default this won't be done but if the toolbar // has a non default background colour, then it would be used in both // places resulting in flicker) - SetBackgroundStyle(wxBG_STYLE_PAINT); + if (wxApp::GetComCtl32Version() >= 600) + { + SetBackgroundStyle(wxBG_STYLE_PAINT); + } return true; } @@ -1679,6 +1683,13 @@ void wxToolBar::OnMouseEvent(wxMouseEvent& event) } } +// This handler is needed to fix problems with painting the background of +// toolbar icons with comctl32.dll < 6.0. +void wxToolBar::OnEraseBackground(wxEraseEvent& event) +{ + MSWDoEraseBackground(event.GetDC()->GetHDC()); +} + bool wxToolBar::HandleSize(WXWPARAM WXUNUSED(wParam), WXLPARAM lParam) { // wait until we have some tools