X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5c836c463a8ece980b66ebc9920f1b045d9a8f33..767e3be0fa755e435a070d145fa623e36762d7a8:/src/msw/notebook.cpp diff --git a/src/msw/notebook.cpp b/src/msw/notebook.cpp index 3741960c93..f8896e0cc1 100644 --- a/src/msw/notebook.cpp +++ b/src/msw/notebook.cpp @@ -25,6 +25,7 @@ // wxWidgets #ifndef WX_PRECOMP #include "wx/string.h" + #include "wx/dc.h" #endif // WX_PRECOMP #include "wx/log.h" @@ -242,18 +243,18 @@ bool wxNotebook::Create(wxWindow *parent, long style, const wxString& name) { - // Does ComCtl32 support non-top tabs? - int verComCtl32 = wxApp::GetComCtl32Version(); - if ( verComCtl32 < 470 || verComCtl32 >= 600 ) + // comctl32.dll 6.0 doesn't support non-top tabs with visual styles (the + // control is simply not rendered correctly), so disable them in this case + const int verComCtl32 = wxApp::GetComCtl32Version(); + if ( verComCtl32 == 600 ) { - if (style & wxNB_BOTTOM) - style &= ~wxNB_BOTTOM; - - if (style & wxNB_LEFT) - style &= ~wxNB_LEFT; - - if (style & wxNB_RIGHT) - style &= ~wxNB_RIGHT; + // check if we use themes at all -- if we don't, we're still ok +#if wxUSE_UXTHEME + if ( wxUxThemeEngine::GetIfActive() ) +#endif + { + style &= ~(wxNB_BOTTOM | wxNB_LEFT | wxNB_RIGHT); + } } if ( !CreateControl(parent, id, pos, size, style | wxTAB_TRAVERSAL, @@ -909,19 +910,23 @@ WXHBRUSH wxNotebook::GetThemeBackgroundBrush(WXHDC hDC, wxWindow *win) const } void wxNotebook::DoEraseBackground(wxEraseEvent& event) +{ + DoEraseBackground((wxWindow *)event.GetEventObject(), + (WXHDC)GetHdcOf(*event.GetDC())); +} + +void wxNotebook::DoEraseBackground(wxWindow *win, WXHDC hDC) { // we can either draw the background ourselves or let DrawThemeBackground() // do it, but as we already have the correct brush, let's do it ourselves // (note that we use the same code in wxControl::MSWControlColor(), so if // it breaks, it should at least break in consistent way) - wxWindow *win = (wxWindow *)event.GetEventObject(); - HDC hdc = GetHdcOf(*event.GetDC()); - WXHBRUSH hbr = GetThemeBackgroundBrush((WXHDC)hdc, win); + WXHBRUSH hbr = GetThemeBackgroundBrush(hDC, win); if ( hbr ) { RECT rectClient; ::GetClientRect(GetHwndOf(win), &rectClient); - ::FillRect(hdc, &rectClient, (HBRUSH)hbr); + ::FillRect((HDC)hDC, &rectClient, (HBRUSH)hbr); } }