X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3ff066a4ecb73476fc67c7a2c8a8823e67add833..10a59880771fae005b31e003916a028267b54427:/src/msw/spinctrl.cpp diff --git a/src/msw/spinctrl.cpp b/src/msw/spinctrl.cpp index de16c045b6..a2a61fc04a 100644 --- a/src/msw/spinctrl.cpp +++ b/src/msw/spinctrl.cpp @@ -69,14 +69,14 @@ wxBEGIN_FLAGS( wxSpinCtrlStyle ) wxFLAGS_MEMBER(wxDOUBLE_BORDER) wxFLAGS_MEMBER(wxRAISED_BORDER) wxFLAGS_MEMBER(wxSTATIC_BORDER) - wxFLAGS_MEMBER(wxNO_BORDER) + wxFLAGS_MEMBER(wxBORDER) // standard window styles wxFLAGS_MEMBER(wxTAB_TRAVERSAL) wxFLAGS_MEMBER(wxCLIP_CHILDREN) wxFLAGS_MEMBER(wxTRANSPARENT_WINDOW) wxFLAGS_MEMBER(wxWANTS_CHARS) - wxFLAGS_MEMBER(wxNO_FULL_REPAINT_ON_RESIZE) + wxFLAGS_MEMBER(wxFULL_REPAINT_ON_RESIZE) wxFLAGS_MEMBER(wxALWAYS_SHOW_SB ) wxFLAGS_MEMBER(wxVSCROLL) wxFLAGS_MEMBER(wxHSCROLL) @@ -96,11 +96,11 @@ wxBEGIN_PROPERTIES_TABLE(wxSpinCtrl) wxEVENT_PROPERTY( TextUpdated , wxEVT_COMMAND_TEXT_UPDATED , wxCommandEvent ) wxEVENT_PROPERTY( TextEnter , wxEVT_COMMAND_TEXT_ENTER , wxCommandEvent ) - wxPROPERTY( ValueString , wxString , SetValue , GetValue , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) ; + wxPROPERTY( ValueString , wxString , SetValue , GetValue , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) ; wxPROPERTY( Value , int , SetValue, GetValue, 0 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) wxPROPERTY( Min , int , SetMin, GetMin, 0, 0 /*flags*/ , wxT("Helpstring") , wxT("group") ) wxPROPERTY( Max , int , SetMax, GetMax, 0 , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) - wxPROPERTY_FLAGS( WindowStyle , wxSpinCtrlStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style + wxPROPERTY_FLAGS( WindowStyle , wxSpinCtrlStyle , long , SetWindowStyleFlag , GetWindowStyleFlag , EMPTY_MACROVALUE , 0 /*flags*/ , wxT("Helpstring") , wxT("group")) // style /* TODO PROPERTIES style wxSP_ARROW_KEYS @@ -149,7 +149,7 @@ LRESULT APIENTRY _EXPORT wxBuddyTextWndProc(HWND hwnd, WPARAM wParam, LPARAM lParam) { - wxSpinCtrl *spin = (wxSpinCtrl *)::GetWindowLong(hwnd, GWL_USERDATA); + wxSpinCtrl *spin = (wxSpinCtrl *)wxGetWindowUserData(hwnd); // forward some messages (the key and focus ones only so far) to // the spin ctrl @@ -158,7 +158,7 @@ LRESULT APIENTRY _EXPORT wxBuddyTextWndProc(HWND hwnd, case WM_SETFOCUS: // if the focus comes from the spin control itself, don't set it // back to it -- we don't want to go into an infinite loop - if ( wParam == spin->GetHWND() ) + if ( (WXHWND)wParam == spin->GetHWND() ) break; //else: fall through @@ -170,7 +170,7 @@ LRESULT APIENTRY _EXPORT wxBuddyTextWndProc(HWND hwnd, spin->MSWWindowProc(message, wParam, lParam); // The control may have been deleted at this point, so check. - if (!(::IsWindow(hwnd) && ((wxSpinCtrl *)::GetWindowLong(hwnd, GWL_USERDATA)) == spin)) + if ( !::IsWindow(hwnd) || wxGetWindowUserData(hwnd) != spin ) return 0; break; @@ -186,8 +186,7 @@ LRESULT APIENTRY _EXPORT wxBuddyTextWndProc(HWND hwnd, /* static */ wxSpinCtrl *wxSpinCtrl::GetSpinForTextCtrl(WXHWND hwndBuddy) { - wxSpinCtrl *spin = (wxSpinCtrl *)::GetWindowLong((HWND)hwndBuddy, - GWL_USERDATA); + wxSpinCtrl *spin = (wxSpinCtrl *)wxGetWindowUserData((HWND)hwndBuddy); int i = ms_allSpins.Index(spin); @@ -297,7 +296,11 @@ bool wxSpinCtrl::Create(wxWindow *parent, style |= wxSP_VERTICAL; if ( (style & wxBORDER_MASK) == wxBORDER_DEFAULT ) +#ifdef __WXWINCE__ + style |= wxBORDER_SIMPLE; +#else style |= wxBORDER_SUNKEN; +#endif SetWindowStyle(style); @@ -363,25 +366,26 @@ bool wxSpinCtrl::Create(wxWindow *parent, SetValue(initial); // subclass the text ctrl to be able to intercept some events - m_wndProcBuddy = (WXFARPROC)::GetWindowLong(GetBuddyHwnd(), GWL_WNDPROC); - ::SetWindowLong(GetBuddyHwnd(), GWL_USERDATA, (LONG)this); - ::SetWindowLong(GetBuddyHwnd(), GWL_WNDPROC, (LONG)wxBuddyTextWndProc); + wxSetWindowUserData(GetBuddyHwnd(), this); + m_wndProcBuddy = (WXFARPROC)wxSetWindowProc(GetBuddyHwnd(), + wxBuddyTextWndProc); - // should have the same font as the other controls - SetFont(GetParent()->GetFont()); + // set up fonts and colours (This is nomally done in MSWCreateControl) + InheritAttributes(); + if (!m_hasFont) + SetFont(GetDefaultAttributes().font); // set the size of the text window - can do it only now, because we // couldn't call DoGetBestSize() before as font wasn't set if ( sizeText.y <= 0 ) { int cx, cy; - wxGetCharSize(GetHWND(), &cx, &cy, &GetFont()); + wxGetCharSize(GetHWND(), &cx, &cy, GetFont()); sizeText.y = EDIT_HEIGHT_FROM_CHAR_HEIGHT(cy); } - DoMoveWindow(pos.x, pos.y, - sizeText.x + sizeBtn.x + MARGIN_BETWEEN, sizeText.y); + SetBestSize(size); (void)::ShowWindow(GetBuddyHwnd(), SW_SHOW); @@ -438,7 +442,7 @@ int wxSpinCtrl::GetValue() const void wxSpinCtrl::SetSelection(long from, long to) { - // if from and to are both -1, it means (in wxWindows) that all text should + // if from and to are both -1, it means (in wxWidgets) that all text should // be selected - translate into Windows convention if ( (from == -1) && (to == -1) ) { @@ -523,10 +527,15 @@ wxSize wxSpinCtrl::DoGetBestSize() const sizeBtn.x += DEFAULT_ITEM_WIDTH + MARGIN_BETWEEN; int y; - wxGetCharSize(GetHWND(), NULL, &y, &GetFont()); + wxGetCharSize(GetHWND(), NULL, &y, GetFont()); y = EDIT_HEIGHT_FROM_CHAR_HEIGHT(y); - if ( sizeBtn.y < y ) + // JACS: we should always use the height calculated + // from above, because otherwise we'll get a spin control + // that's too big. So never use the height calculated + // from wxSpinButton::DoGetBestSize(). + + // if ( sizeBtn.y < y ) { // make the text tall enough sizeBtn.y = y;