diff --git a/src/msw/tbar95.cpp b/src/msw/tbar95.cpp index ec04b3525d..249e4b09ff 100644 --- a/src/msw/tbar95.cpp +++ b/src/msw/tbar95.cpp @@ -265,15 +265,6 @@ bool wxToolBar::MSWCreateToolbar(const wxPoint& pos, const wxSize& size) // toolbar-specific post initialisation ::SendMessage(GetHwnd(), TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); - // The toolbar background for some colour schemes cannot be determined - // (for example Silver). So set an explicit background colour to avoid parts of - // the background being painted wrongly. - - int majorVersion, minorVersion; - wxGetOsVersion(& majorVersion, & minorVersion); - if (majorVersion < 6) - SetBackgroundColour(GetBackgroundColour()); - return true; } @@ -959,6 +950,8 @@ bool wxToolBar::Realize() // Deal with the controls finally // ------------------------------ + bool hasControls = false; + // adjust the controls size to fit nicely in the toolbar int y = 0; size_t index = 0; @@ -990,6 +983,8 @@ bool wxToolBar::Realize() continue; } + hasControls = true; + wxControl *control = tool->GetControl(); wxSize size = control->GetSize(); @@ -1099,6 +1094,13 @@ bool wxToolBar::Realize() InvalidateBestSize(); UpdateSize(); + // Fix a bug on e.g. the Silver theme on WinXP where control backgrounds + // are incorrectly drawn, by forcing the background to a specific colour. + int majorVersion, minorVersion; + wxGetOsVersion(& majorVersion, & minorVersion); + if (majorVersion < 6 && hasControls && !!UseBgCol()) + SetBackgroundColour(GetBackgroundColour()); + return true; }