Don't let MSW's wxSpinCtrl emit spin up and down events as in the other ports

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54297 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 2008-06-20 08:17:33 +00:00
parent 5bc128d67f
commit 177e38e645
3 changed files with 29 additions and 14 deletions

View 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);

View 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;

View 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
// ----------------------------------------------------------------------------