#include "wx/msw/wrapcctl.h" // include <commctrl.h> "properly"
#include "wx/event.h"
#include "wx/textctrl.h"
+ #include "wx/wxcrtvararg.h"
#endif
#include "wx/msw/private.h"
IMPLEMENT_DYNAMIC_CLASS_XTI(wxSpinCtrl, wxControl,"wx/spinbut.h")
wxBEGIN_PROPERTIES_TABLE(wxSpinCtrl)
- wxEVENT_RANGE_PROPERTY( Spin , wxEVT_SCROLL_TOP , wxEVT_SCROLL_ENDSCROLL , wxSpinEvent )
+ wxEVENT_RANGE_PROPERTY( Spin , wxEVT_SCROLL_TOP , wxEVT_SCROLL_CHANGED , wxSpinEvent )
wxEVENT_PROPERTY( Updated , wxEVT_COMMAND_SPINCTRL_UPDATED , wxCommandEvent )
wxEVENT_PROPERTY( TextUpdated , wxEVT_COMMAND_TEXT_UPDATED , wxCommandEvent )
wxEVENT_PROPERTY( TextEnter , wxEVT_COMMAND_TEXT_ENTER , wxCommandEvent )
WXDWORD exStyle = 0;
WXDWORD msStyle = MSWGetStyle(GetWindowStyle(), & exStyle) ;
- // calculate the sizes: the size given is the toal size for both controls
+ // this control is used for numeric entry so normally using these flags by
+ // default shouldn't be a problem, if it is we can always add a style such
+ // as wxSP_NON_NUMERIC later
+ msStyle |= ES_RIGHT | ES_NUMBER;
+
+ // calculate the sizes: the size given is the total size for both controls
// and we need to fit them both in the given width (height is the same)
wxSize sizeText(size), sizeBtn(size);
sizeBtn.x = wxSpinButton::DoGetBestSize().x;
}
wxSpinButtonBase::SetRange(min, max);
- SetValue(initial);
-
- m_oldValue = initial;
// subclass the text ctrl to be able to intercept some events
wxSetWindowUserData(GetBuddyHwnd(), this);
// associate the text window with the spin button
(void)::SendMessage(GetHwnd(), UDM_SETBUDDY, (WPARAM)m_hwndBuddy, 0);
+ SetValue(initial);
+
+ // Set the range in the native control
+ SetRange(min, max);
+
if ( !value.empty() )
{
SetValue(value);
+ m_oldValue = (int) wxAtol(value);
+ }
+ else
+ {
+ SetValue(wxString::Format(wxT("%d"), initial));
+ m_oldValue = initial;
}
// do it after finishing with m_hwndBuddy creation to avoid generating
// text control is currently empty, the spin button seems to be happy
// to leave it like this, while we really want to always show the
// current value in the control, so do it manually
- ::SetWindowText(GetBuddyHwnd(), wxString::Format(_T("%d"), val));
+ ::SetWindowText(GetBuddyHwnd(),
+ wxString::Format(_T("%d"), val).wx_str());
}
m_oldValue = GetValue();