X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e0a050e347b1ece07ad5f165ba1b1d16edbeae77..18caa1e963269d02499b327bb4e7cc2ac48fd67e:/src/msw/spinctrl.cpp diff --git a/src/msw/spinctrl.cpp b/src/msw/spinctrl.cpp index 39e32fbf70..c5644f4dfc 100644 --- a/src/msw/spinctrl.cpp +++ b/src/msw/spinctrl.cpp @@ -148,8 +148,7 @@ LRESULT APIENTRY _EXPORT wxBuddyTextWndProc(HWND hwnd, { wxSpinCtrl *spin = (wxSpinCtrl *)wxGetWindowUserData(hwnd); - // forward some messages (the key and focus ones only so far) to - // the spin ctrl + // forward some messages (mostly the key and focus ones) to the spin ctrl switch ( message ) { case WM_SETFOCUS: @@ -164,6 +163,12 @@ LRESULT APIENTRY _EXPORT wxBuddyTextWndProc(HWND hwnd, case WM_DEADCHAR: case WM_KEYUP: case WM_KEYDOWN: +#ifdef WM_HELP + // we need to forward WM_HELP too to ensure that the context help + // associated with wxSpinCtrl is shown when the text control part of it + // is clicked with the "?" cursor + case WM_HELP: +#endif spin->MSWWindowProc(message, wParam, lParam); // The control may have been deleted at this point, so check. @@ -207,7 +212,7 @@ bool wxSpinCtrl::ProcessTextCommand(WXWORD cmd, WXWORD WXUNUSED(id)) wxString val = wxGetWindowText(m_hwndBuddy); event.SetString(val); event.SetInt(GetValue()); - return GetEventHandler()->ProcessEvent(event); + return HandleWindowEvent(event); } // not processed @@ -225,7 +230,7 @@ void wxSpinCtrl::OnChar(wxKeyEvent& event) wxString val = wxGetWindowText(m_hwndBuddy); event.SetString(val); event.SetInt(GetValue()); - if ( GetEventHandler()->ProcessEvent(event) ) + if ( HandleWindowEvent(event) ) return; break; } @@ -241,7 +246,7 @@ void wxSpinCtrl::OnChar(wxKeyEvent& event) eventNav.SetWindowChange(event.ControlDown()); eventNav.SetEventObject(this); - if ( GetParent()->GetEventHandler()->ProcessEvent(eventNav) ) + if ( GetParent()->HandleWindowEvent(eventNav) ) return; } break; @@ -318,7 +323,12 @@ bool wxSpinCtrl::Create(wxWindow *parent, 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; @@ -566,7 +576,7 @@ void wxSpinCtrl::SendSpinUpdate(int value) event.SetEventObject(this); event.SetInt(value); - (void)GetEventHandler()->ProcessEvent(event); + (void)HandleWindowEvent(event); m_oldValue = value; } @@ -638,6 +648,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