]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/notebook.cpp
Correct way of modyfing stc.cpp. Thanks Robin for quick guide :-)
[wxWidgets.git] / src / msw / notebook.cpp
index 3741960c93090267e12eb41e8b5f219514ca04f4..f8896e0cc16baea72df08f8b9e3da4e966fae3bc 100644 (file)
@@ -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);
     }
 }