X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5a0b1008ff8e3e20ed2219172bf000844c6e91e4..9fb99466b5b43589f477783ca65bf17714ff8615:/src/msw/spinctrl.cpp diff --git a/src/msw/spinctrl.cpp b/src/msw/spinctrl.cpp index c5644f4dfc..e5a4577acf 100644 --- a/src/msw/spinctrl.cpp +++ b/src/msw/spinctrl.cpp @@ -537,6 +537,46 @@ bool wxSpinCtrl::Show(bool show) return true; } +bool wxSpinCtrl::Reparent(wxWindowBase *newParent) +{ + // Reparenting both the updown control and its buddy does not seem to work: + // they continue to be connected somehow, but visually there is no feedback + // on the buddy edit control. To avoid this problem, we reparent the buddy + // window normally, but we recreate the updown control and reassign its + // buddy. + + if ( !wxWindowBase::Reparent(newParent) ) + return false; + + newParent->GetChildren().DeleteObject(this); + + // preserve the old values + const wxSize size = GetSize(); + int value = GetValue(); + const wxRect btnRect = wxRectFromRECT(wxGetWindowRect(GetHwnd())); + + // destroy the old spin button + UnsubclassWin(); + if ( !::DestroyWindow(GetHwnd()) ) + wxLogLastError(wxT("DestroyWindow")); + + // create and initialize the new one + if ( !wxSpinButton::Create(GetParent(), GetId(), + btnRect.GetPosition(), btnRect.GetSize(), + GetWindowStyle(), GetName()) ) + return false; + + SetValue(value); + SetRange(m_min, m_max); + SetInitialSize(size); + + // associate it with the buddy control again + ::SetParent(GetBuddyHwnd(), GetHwndOf(GetParent())); + (void)::SendMessage(GetHwnd(), UDM_SETBUDDY, (WPARAM)GetBuddyHwnd(), 0); + + return true; +} + bool wxSpinCtrl::Enable(bool enable) { if ( !wxControl::Enable(enable) )