]> git.saurik.com Git - wxWidgets.git/commitdiff
Don't let MSW's wxSpinCtrl emit spin up and down events as in the other ports
authorRobert Roebling <robert@roebling.de>
Fri, 20 Jun 2008 08:17:33 +0000 (08:17 +0000)
committerRobert Roebling <robert@roebling.de>
Fri, 20 Jun 2008 08:17:33 +0000 (08:17 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54297 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/spinctrl.h
interface/spinctrl.h
src/msw/spinctrl.cpp

index d1707c703f5d131a55251ed12e0321357bccbfb5..8f200c0267879b1c38ac2be2ea5faea850d81274 100644 (file)
@@ -99,8 +99,9 @@ protected:
     virtual void DoSetToolTip( wxToolTip *tip );
 #endif // wxUSE_TOOLTIPS
 
-    // the handler for wxSpinButton events
-    void OnSpinChange(wxSpinEvent& event);
+    virtual bool MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARAM *result);
+    virtual bool MSWOnScroll(int orientation, WXWORD wParam,
+                             WXWORD pos, WXHWND control);
 
     // handle processing of special keys
     void OnChar(wxKeyEvent& event);
index af58fbcbcb1cfc70f748d9f2c9737b1a596208fa..06d29a3647992f729b4ea4f26a676e2178ea4115 100644 (file)
@@ -94,12 +94,6 @@ public:
 
     /**
         Gets the value of the spin control.
-
-        Notice that if you use this method from a handler processing a change
-        of the control value, it may return the old value, not the new one
-        (because the event handler can veto the change and this prevent the
-        value from changing at all). Use wxSpinEvent::GetValue() to retrieve
-        the new value in this case.
     */
     int GetValue() const;
 
index 73fb437fc071edef1f39925c6f800dd5746995c2..20df40a30e236828bde5e9fd358ff9d04f9f4b49 100644 (file)
@@ -114,10 +114,8 @@ IMPLEMENT_DYNAMIC_CLASS(wxSpinCtrl, wxControl)
 
 BEGIN_EVENT_TABLE(wxSpinCtrl, wxSpinButton)
     EVT_CHAR(wxSpinCtrl::OnChar)
-
     EVT_SET_FOCUS(wxSpinCtrl::OnSetFocus)
     EVT_KILL_FOCUS(wxSpinCtrl::OnKillFocus)
-    EVT_SPIN(wxID_ANY, wxSpinCtrl::OnSpinChange)
 END_EVENT_TABLE()
 
 #define GetBuddyHwnd()      (HWND)(m_hwndBuddy)
@@ -627,15 +625,37 @@ void wxSpinCtrl::SendSpinUpdate(int value)
     m_oldValue = value;
 }
 
-void wxSpinCtrl::OnSpinChange(wxSpinEvent& eventSpin)
+bool wxSpinCtrl::MSWOnScroll(int WXUNUSED(orientation), WXWORD wParam,
+                               WXWORD pos, WXHWND control)
 {
-    const int value = eventSpin.GetPosition();
-    if ( value != m_oldValue )
+    wxCHECK_MSG( control, false, wxT("scrolling what?") );
+
+    if ( wParam != SB_THUMBPOSITION )
     {
-        SendSpinUpdate(value);
+        // probable SB_ENDSCROLL - we don't react to it
+        return false;
     }
+
+    int new_value = (short) pos;
+    if (m_oldValue != new_value)
+       SendSpinUpdate( new_value );
+
+    return TRUE;
+}
+
+bool wxSpinCtrl::MSWOnNotify(int WXUNUSED(idCtrl), WXLPARAM lParam, WXLPARAM *result)
+{
+    NM_UPDOWN *lpnmud = (NM_UPDOWN *)lParam;
+
+    if (lpnmud->hdr.hwndFrom != GetHwnd()) // make sure it is the right control
+        return false;
+
+    *result = 0;  // never reject UP and DOWN events
+
+    return TRUE;
 }
 
+
 // ----------------------------------------------------------------------------
 // size calculations
 // ----------------------------------------------------------------------------