]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/tbar95.cpp
fix GetTLWParentIfNotBeingDeleted() to work correctly even if an intermediate non...
[wxWidgets.git] / src / msw / tbar95.cpp
index b653a821d828e2474dde20d7bd6c3788543bcba5..21ab3d581f57d818c867407bfaf675744d9337c2 100644 (file)
@@ -44,6 +44,7 @@
 #endif
 
 #include "wx/sysopt.h"
+#include "wx/dcclient.h"
 
 #include "wx/msw/private.h"
 
@@ -308,13 +309,6 @@ bool wxToolBar::MSWCreateToolbar(const wxPoint& pos, const wxSize& size)
         ::SendMessage(GetHwnd(), TB_SETEXTENDEDSTYLE, 0, TBSTYLE_EX_DRAWDDARROWS);
 #endif
 
-    // 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)
-        SetBackgroundColour(GetBackgroundColour());
-
     return true;
 }
 
@@ -961,7 +955,7 @@ bool wxToolBar::Realize()
                                 if ( tool->Toggle(false) )
                                     DoToggleTool(tool, false);
 
-                                prevButton.fsState &= TBSTATE_CHECKED;
+                                prevButton.fsState &= ~TBSTATE_CHECKED;
                                 nodePrev = nodePrev->GetPrevious();
                                 prevIndex--;
                             }
@@ -1185,9 +1179,14 @@ bool wxToolBar::Realize()
 // message handlers
 // ----------------------------------------------------------------------------
 
-bool wxToolBar::MSWCommand(WXUINT WXUNUSED(cmd), WXWORD id)
+bool wxToolBar::MSWCommand(WXUINT WXUNUSED(cmd), WXWORD id_)
 {
-    wxToolBarToolBase *tool = FindById((int)id);
+    // cast to signed is important as we compare this id with (signed) ints in
+    // FindById() and without the cast we'd get a positive int from a
+    // "negative" (i.e. > 32767) WORD
+    const int id = (signed short)id_;
+
+    wxToolBarToolBase *tool = FindById(id);
     if ( !tool )
         return false;
 
@@ -1209,7 +1208,7 @@ bool wxToolBar::MSWCommand(WXUINT WXUNUSED(cmd), WXWORD id)
 
     // OnLeftClick() can veto the button state change - for buttons which
     // may be toggled only, of couse
-    if ( !OnLeftClick((int)id, toggled) && tool->CanBeToggled() )
+    if ( !OnLeftClick(id, toggled) && tool->CanBeToggled() )
     {
         // revert back
         tool->Toggle(!toggled);
@@ -1230,7 +1229,7 @@ bool wxToolBar::MSWOnNotify(int WXUNUSED(idCtrl),
         LPNMTOOLBAR tbhdr = (LPNMTOOLBAR)lParam;
 
         wxCommandEvent evt(wxEVT_COMMAND_TOOL_DROPDOWN_CLICKED, tbhdr->iItem);
-        if ( GetEventHandler()->ProcessEvent(evt) )
+        if ( HandleWindowEvent(evt) )
         {
             // Event got handled, don't display default popup menu
             return false;
@@ -1538,7 +1537,11 @@ void wxToolBar::OnMouseEvent(wxMouseEvent& event)
 void wxToolBar::OnEraseBackground(wxEraseEvent& event)
 {
     RECT rect = wxGetClientRect(GetHwnd());
-    HDC hdc = GetHdcOf((*event.GetDC()));
+    
+    wxDC *dc = event.GetDC();
+    if (!dc) return;
+    wxMSWDCImpl *impl = (wxMSWDCImpl*) dc->GetImpl();
+    HDC hdc = GetHdcOf(*impl);
 
     int majorVersion, minorVersion;
     wxGetOsVersion(& majorVersion, & minorVersion);
@@ -1770,8 +1773,9 @@ bool wxToolBar::HandlePaint(WXWPARAM wParam, WXLPARAM lParam)
                             r.right = clientSize.x;
                             r.top = 0;
                             r.bottom = clientSize.y;
-
-                            HRESULT hr = theme->DrawThemeBackground(hTheme, (HDC) dc.GetHDC(), 0, 0, & r, & clipRect);
+                            
+                            wxMSWDCImpl *impl = (wxMSWDCImpl*) dc.GetImpl();
+                            HRESULT hr = theme->DrawThemeBackground(hTheme, GetHdcOf(*impl), 0, 0, & r, & clipRect);
                             if ( hr == S_OK )
                                 haveRefreshed = true;
                         }