X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/837e57436a89516a5fa9f478f401e06bd872c17c..dd107c50be43e8d4dbdba20df162faf119a3781c:/src/msw/slidrmsw.cpp diff --git a/src/msw/slidrmsw.cpp b/src/msw/slidrmsw.cpp index fb14495286..2f27084534 100644 --- a/src/msw/slidrmsw.cpp +++ b/src/msw/slidrmsw.cpp @@ -29,9 +29,7 @@ #include "wx/msw/slidrmsw.h" #include "wx/msw/private.h" -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxSliderMSW, wxControl) -#endif // Slider wxSliderMSW::wxSliderMSW() @@ -54,7 +52,9 @@ bool wxSliderMSW::Create(wxWindow *parent, wxWindowID id, const wxString& name) { SetName(name); +#if wxUSE_VALIDATORS SetValidator(validator); +#endif // wxUSE_VALIDATORS if (parent) parent->AddChild(this); SetBackgroundColour(parent->GetBackgroundColour()) ; @@ -82,31 +82,34 @@ bool wxSliderMSW::Create(wxWindow *parent, wxWindowID id, long msStyle = WS_CHILD | WS_VISIBLE | WS_BORDER | SS_CENTER; + if ( m_windowStyle & wxCLIP_SIBLINGS ) + msStyle |= WS_CLIPSIBLINGS; + bool want3D; WXDWORD exStyle = Determine3DEffects(WS_EX_CLIENTEDGE, &want3D) ; - m_staticValue = (WXHWND) CreateWindowEx(exStyle, _T("STATIC"), NULL, + m_staticValue = (WXHWND) CreateWindowEx(exStyle, wxT("STATIC"), NULL, msStyle, 0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)NewControlId(), wxGetInstance(), NULL); // Now create min static control - wxSprintf(wxBuffer, _T("%d"), minValue); - m_staticMin = (WXHWND) CreateWindowEx(0, _T("STATIC"), wxBuffer, - STATIC_FLAGS, + wxSprintf(wxBuffer, wxT("%d"), minValue); + DWORD wstyle = STATIC_FLAGS; + if ( m_windowStyle & wxCLIP_SIBLINGS ) + wstyle |= WS_CLIPSIBLINGS; + m_staticMin = (WXHWND) CreateWindowEx(0, wxT("STATIC"), wxBuffer, + wstyle, 0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)NewControlId(), wxGetInstance(), NULL); - // Now create slider - m_windowId = (int)NewControlId(); - msStyle = 0; if (m_windowStyle & wxSL_VERTICAL) msStyle = SBS_VERT | WS_CHILD | WS_VISIBLE | WS_TABSTOP ; else msStyle = SBS_HORZ | WS_CHILD | WS_VISIBLE | WS_TABSTOP ; - HWND scroll_bar = CreateWindowEx(MakeExtendedStyle(m_windowStyle), _T("SCROLLBAR"), wxBuffer, + HWND scroll_bar = CreateWindowEx(MakeExtendedStyle(m_windowStyle), wxT("SCROLLBAR"), wxBuffer, msStyle, 0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)m_windowId, wxGetInstance(), NULL); @@ -125,9 +128,12 @@ bool wxSliderMSW::Create(wxWindow *parent, wxWindowID id, SubclassWin(GetHWND()); // Finally, create max value static item - wxSprintf(wxBuffer, _T("%d"), maxValue); - m_staticMax = (WXHWND) CreateWindowEx(0, _T("STATIC"), wxBuffer, - STATIC_FLAGS, + wxSprintf(wxBuffer, wxT("%d"), maxValue); + wstyle = STATIC_FLAGS; + if ( m_windowStyle & wxCLIP_SIBLINGS ) + wstyle |= WS_CLIPSIBLINGS; + m_staticMax = (WXHWND) CreateWindowEx(0, wxT("STATIC"), wxBuffer, + wstyle, 0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)NewControlId(), wxGetInstance(), NULL); @@ -231,6 +237,7 @@ bool wxSliderMSW::MSWOnScroll(int WXUNUSED(orientation), WXWORD wParam, GetEventHandler()->ProcessEvent(event); wxCommandEvent cevent( wxEVT_COMMAND_SLIDER_UPDATED, GetId() ); + cevent.SetInt( newPos ); cevent.SetEventObject( this ); return GetEventHandler()->ProcessEvent( cevent ); @@ -248,15 +255,15 @@ wxSliderMSW::~wxSliderMSW() int wxSliderMSW::GetValue() const { - return ::GetScrollPos((HWND) GetHWND(), SB_CTL); + return ::GetScrollPos(GetHwnd(), SB_CTL); } void wxSliderMSW::SetValue(int value) { - ::SetScrollPos((HWND) GetHWND(), SB_CTL, value, TRUE); + ::SetScrollPos(GetHwnd(), SB_CTL, value, TRUE); if (m_staticValue) { - wxSprintf(wxBuffer, _T("%d"), value); + wxSprintf(wxBuffer, wxT("%d"), value); SetWindowText((HWND) m_staticValue, wxBuffer); } } @@ -315,6 +322,8 @@ void wxSliderMSW::GetPosition(int *x, int *y) const *y = point.y; } +// TODO one day, make sense of all this horros and replace it with a readable +// DoGetBestSize() void wxSliderMSW::DoSetSize(int x, int y, int width, int height, int sizeFlags) { int x1 = x; @@ -324,9 +333,9 @@ void wxSliderMSW::DoSetSize(int x, int y, int width, int height, int sizeFlags) int currentX, currentY; GetPosition(¤tX, ¤tY); - if (x == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) + if (x == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) x1 = currentX; - if (y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) + if (y == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE)) y1 = currentY; AdjustForParentClientOrigin(x1, y1, sizeFlags); @@ -379,7 +388,7 @@ void wxSliderMSW::DoSetSize(int x, int y, int width, int height, int sizeFlags) if (slider_length < 100) slider_length = 100; - MoveWindow((HWND) GetHWND(), x_offset, y_offset, slider_length, slider_height, TRUE); + MoveWindow(GetHwnd(), x_offset, y_offset, slider_length, slider_height, TRUE); x_offset += slider_length + cx; MoveWindow((HWND) m_staticMax, x_offset, y_offset, (int)max_len, cy, TRUE); @@ -391,7 +400,7 @@ void wxSliderMSW::DoSetSize(int x, int y, int width, int height, int sizeFlags) w1 = 200; if ( h1 < 0 ) h1 = 20; - MoveWindow((HWND) GetHWND(), x1, y1, w1, h1, TRUE); + MoveWindow(GetHwnd(), x1, y1, w1, h1, TRUE); } } else @@ -435,7 +444,7 @@ void wxSliderMSW::DoSetSize(int x, int y, int width, int height, int sizeFlags) if (slider_length < 100) slider_length = 100; - MoveWindow((HWND) GetHWND(), x_offset, y_offset, slider_width, slider_length, TRUE); + MoveWindow(GetHwnd(), x_offset, y_offset, slider_width, slider_length, TRUE); y_offset += slider_length; MoveWindow((HWND) m_staticMax, x_offset, y_offset, (int)max_len, cy, TRUE); @@ -447,7 +456,7 @@ void wxSliderMSW::DoSetSize(int x, int y, int width, int height, int sizeFlags) w1 = 20; if ( h1 < 0 ) h1 = 200; - MoveWindow((HWND) GetHWND(), x1, y1, w1, h1, TRUE); + MoveWindow(GetHwnd(), x1, y1, w1, h1, TRUE); } } } @@ -457,17 +466,17 @@ void wxSliderMSW::SetRange(int minValue, int maxValue) m_rangeMin = minValue; m_rangeMax = maxValue; - ::SetScrollRange((HWND) GetHWND(), SB_CTL, m_rangeMin, m_rangeMax, TRUE); + ::SetScrollRange(GetHwnd(), SB_CTL, m_rangeMin, m_rangeMax, TRUE); wxChar buf[40]; if ( m_staticMin ) { - wxSprintf(buf, _T("%d"), m_rangeMin); + wxSprintf(buf, wxT("%d"), m_rangeMin); SetWindowText((HWND) m_staticMin, buf); } if ( m_staticMax ) { - wxSprintf(buf, _T("%d"), m_rangeMax); + wxSprintf(buf, wxT("%d"), m_rangeMax); SetWindowText((HWND) m_staticMax, buf); } } @@ -479,17 +488,7 @@ WXHBRUSH wxSliderMSW::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, return 0; // Otherwise, it's a static - if (GetParent()->GetTransparentBackground()) - SetBkMode((HDC) pDC, TRANSPARENT); - else - SetBkMode((HDC) pDC, OPAQUE); - - ::SetBkColor((HDC) pDC, RGB(GetBackgroundColour().Red(), GetBackgroundColour().Green(), GetBackgroundColour().Blue())); - ::SetTextColor((HDC) pDC, RGB(GetForegroundColour().Red(), GetForegroundColour().Green(), GetForegroundColour().Blue())); - - wxBrush *backgroundBrush = wxTheBrushList->FindOrCreateBrush(GetBackgroundColour(), wxSOLID); - - return (WXHBRUSH) backgroundBrush->GetResourceHandle(); + return wxControl::OnCtlColor(pDC, pWnd, nCtlColor, message, wParam, lParam); } // For trackbars only