diff --git a/docs/changes.txt b/docs/changes.txt index dfd0250c52..9dc1bfad84 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -161,6 +161,8 @@ wxMSW: - Fixed rendering of borders for wxTextCtrl with wxTE_RICH(2) style when using Windows XP's Classic UI theme. - Text controls with wxTE_RICH style now also generate wxClipboardTextEvents. +- Fixed wxSpinCtrl::GetClientSize() to return sensible value and not just + spin button's client size. wxGTK: diff --git a/include/wx/msw/spinctrl.h b/include/wx/msw/spinctrl.h index bfbf21ce1e..d04d06f24b 100644 --- a/include/wx/msw/spinctrl.h +++ b/include/wx/msw/spinctrl.h @@ -94,6 +94,10 @@ protected: virtual void DoMoveWindow(int x, int y, int width, int height); virtual wxSize DoGetBestSize() const; virtual void DoGetSize(int *width, int *height) const; +#if wxABI_VERSION >= 20808 + virtual void DoGetClientSize(int *x, int *y) const; +#endif + #if wxUSE_TOOLTIPS virtual void DoSetToolTip( wxToolTip *tip ); #endif // wxUSE_TOOLTIPS diff --git a/src/msw/spinctrl.cpp b/src/msw/spinctrl.cpp index ce21c8aecf..60f0733a0d 100644 --- a/src/msw/spinctrl.cpp +++ b/src/msw/spinctrl.cpp @@ -681,6 +681,19 @@ void wxSpinCtrl::DoGetSize(int *x, int *y) const *y = ctrlrect.bottom - ctrlrect.top; } +void wxSpinCtrl::DoGetClientSize(int *x, int *y) const +{ + RECT spinrect = wxGetClientRect(GetHwnd()); + RECT textrect = wxGetClientRect(GetBuddyHwnd()); + RECT ctrlrect; + UnionRect(&ctrlrect,&textrect, &spinrect); + + if ( x ) + *x = ctrlrect.right - ctrlrect.left; + if ( y ) + *y = ctrlrect.bottom - ctrlrect.top; +} + void wxSpinCtrl::DoGetPosition(int *x, int *y) const { // hack: pretend that our HWND is the text control just for a moment