diff --git a/src/msw/control.cpp b/src/msw/control.cpp index 7dc54a5114..304829225a 100644 --- a/src/msw/control.cpp +++ b/src/msw/control.cpp @@ -358,28 +358,41 @@ WXHBRUSH wxControl::MSWControlColor(WXHDC pDC) ::SetBkMode((HDC)pDC, TRANSPARENT); -#if wxUSE_UXTHEME && wxUSE_NOTEBOOK - if ( wxUxThemeEngine::GetIfActive() ) + // check if we should adapt our background to our parent + for ( wxWindow *win = this; win; win = win->GetParent() ) { - for ( wxWindow *win = this; win; win = win->GetParent() ) + if ( win->IsTopLevel() ) { - if ( win->IsTopLevel() ) - { - // don't go beyond the first top level parent - break; - } - - wxNotebook *nbook = wxDynamicCast(win, wxNotebook); - if ( nbook ) - { - // return value may be NULL but it is ok: if the first parent - // notebook doesn't use themes, then we don't have to process - // this message at all, so let default processing take place - return nbook->GetThemeBackgroundBrush(pDC, this); - } + // don't go beyond the first top level parent + break; } + + if ( win->GetBackgroundStyle() == wxBG_STYLE_COLOUR ) + { + // parent window has solid colour, so it doesn't look + // transparent and hence we shouldn't show notebook background + wxBrush *brush = wxTheBrushList->FindOrCreateBrush + ( + win->GetBackgroundColour(), + wxSOLID + ); + + return (WXHBRUSH)brush->GetResourceHandle(); + } + +#if wxUSE_UXTHEME && wxUSE_NOTEBOOK + // check for the special case of the notebooks which draw themed + // background when themes are enabled + wxNotebook *nbook = wxDynamicCast(win, wxNotebook); + if ( nbook ) + { + // return value may be NULL but it is ok: if the first parent + // notebook doesn't use themes, then we don't have to process + // this message at all, so let default processing take place + return nbook->GetThemeBackgroundBrush(pDC, this); + } +#endif // wxUSE_UXTHEME && wxUSE_NOTEBOOK } -#endif // wxUSE_UXTHEME // let the control deal with background itself return MSWGetDefaultBgBrush();