X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/debe6624c1e9d4bf3243381153d1e173c849bcd8..4ed0aceb92203313439ad8df2cc9623ed56b5486:/src/msw/scrolbar.cpp diff --git a/src/msw/scrolbar.cpp b/src/msw/scrolbar.cpp index 87c52ca273..007c98067f 100644 --- a/src/msw/scrolbar.cpp +++ b/src/msw/scrolbar.cpp @@ -6,7 +6,7 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart and Markus Holzem -// Licence: wxWindows license +// Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ @@ -28,19 +28,14 @@ #include "wx/scrolbar.h" #include "wx/msw/private.h" -// extern wxList wxScrollBarList; -extern void wxFindMaxSize(HWND hwnd, RECT *rect); - -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxScrollBar, wxControl) -#if WXWIN_COMPATIBILITY BEGIN_EVENT_TABLE(wxScrollBar, wxControl) +#if WXWIN_COMPATIBILITY EVT_SCROLL(wxScrollBar::OnScroll) -END_EVENT_TABLE() #endif +END_EVENT_TABLE() -#endif // Scrollbar bool wxScrollBar::Create(wxWindow *parent, wxWindowID id, @@ -53,16 +48,18 @@ bool wxScrollBar::Create(wxWindow *parent, wxWindowID id, return FALSE; parent->AddChild(this); SetName(name); - SetValidator(validator); +#if wxUSE_VALIDATORS + SetValidator(validator); +#endif // wxUSE_VALIDATORS - SetBackgroundColour(parent->GetDefaultBackgroundColour()) ; - SetForegroundColour(parent->GetDefaultForegroundColour()) ; + SetBackgroundColour(parent->GetBackgroundColour()) ; + SetForegroundColour(parent->GetForegroundColour()) ; m_windowStyle = style; if ( id == -1 ) - m_windowId = (int)NewControlId(); + m_windowId = (int)NewControlId(); else - m_windowId = id; + m_windowId = id; int x = pos.x; int y = pos.y; @@ -87,7 +84,7 @@ bool wxScrollBar::Create(wxWindow *parent, wxWindowID id, // Now create scrollbar DWORD _direction = (style & wxHORIZONTAL) ? SBS_HORZ: SBS_VERT; - HWND scroll_bar = CreateWindowEx(MakeExtendedStyle(style), "SCROLLBAR", "scrollbar", + HWND scroll_bar = CreateWindowEx(MakeExtendedStyle(style), wxT("SCROLLBAR"), wxT("scrollbar"), _direction | WS_CHILD | WS_VISIBLE, 0, 0, 0, 0, (HWND) parent->GetHWND(), (HMENU)m_windowId, wxGetInstance(), NULL); @@ -100,7 +97,7 @@ bool wxScrollBar::Create(wxWindow *parent, wxWindowID id, ::SetScrollPos(scroll_bar, SB_CTL, 0, FALSE); ShowWindow(scroll_bar, SW_SHOW); - SetFont(* parent->GetFont()); + SetFont(parent->GetFont()); m_hWnd = (WXHWND)scroll_bar; @@ -116,87 +113,93 @@ wxScrollBar::~wxScrollBar(void) { } -void wxScrollBar::MSWOnVScroll(WXWORD wParam, WXWORD pos, WXHWND control) +bool wxScrollBar::MSWOnScroll(int WXUNUSED(orientation), WXWORD wParam, + WXWORD pos, WXHWND control) { int position = ::GetScrollPos((HWND) control, SB_CTL); int minPos, maxPos; ::GetScrollRange((HWND) control, SB_CTL, &minPos, &maxPos); + #if defined(__WIN95__) - // A page size greater than one has the effect of reducing the - // effective range, therefore the range has already been - // boosted artificially - so reduce it again. - if ( m_pageSize > 1 ) - maxPos -= (m_pageSize - 1); -#endif + // A page size greater than one has the effect of reducing the effective + // range, therefore the range has already been boosted artificially - so + // reduce it again. + if ( m_pageSize > 1 ) + maxPos -= (m_pageSize - 1); +#endif // __WIN95__ wxEventType scrollEvent = wxEVT_NULL; int nScrollInc; switch ( wParam ) { - case SB_TOP: - nScrollInc = maxPos - position; - scrollEvent = wxEVT_SCROLL_TOP; - break; - - case SB_BOTTOM: - nScrollInc = - position; - scrollEvent = wxEVT_SCROLL_BOTTOM; - break; - - case SB_LINEUP: - nScrollInc = -1; - scrollEvent = wxEVT_SCROLL_LINEUP; - break; - - case SB_LINEDOWN: - nScrollInc = 1; - scrollEvent = wxEVT_SCROLL_LINEDOWN; - break; - - case SB_PAGEUP: - nScrollInc = -GetPageSize(); - scrollEvent = wxEVT_SCROLL_PAGEUP; - break; - - case SB_PAGEDOWN: - nScrollInc = GetPageSize(); - scrollEvent = wxEVT_SCROLL_PAGEDOWN; - break; - - case SB_THUMBTRACK: - case SB_THUMBPOSITION: - nScrollInc = pos - position; - scrollEvent = wxEVT_SCROLL_THUMBTRACK; - break; - - default: - nScrollInc = 0; + case SB_TOP: + nScrollInc = maxPos - position; + scrollEvent = wxEVT_SCROLL_TOP; + break; + + case SB_BOTTOM: + nScrollInc = - position; + scrollEvent = wxEVT_SCROLL_BOTTOM; + break; + + case SB_LINEUP: + nScrollInc = -1; + scrollEvent = wxEVT_SCROLL_LINEUP; + break; + + case SB_LINEDOWN: + nScrollInc = 1; + scrollEvent = wxEVT_SCROLL_LINEDOWN; + break; + + case SB_PAGEUP: + nScrollInc = -GetPageSize(); + scrollEvent = wxEVT_SCROLL_PAGEUP; + break; + + case SB_PAGEDOWN: + nScrollInc = GetPageSize(); + scrollEvent = wxEVT_SCROLL_PAGEDOWN; + break; + + case SB_THUMBPOSITION: + nScrollInc = pos - position; + scrollEvent = wxEVT_SCROLL_THUMBRELEASE; + break; + + case SB_THUMBTRACK: + nScrollInc = pos - position; + scrollEvent = wxEVT_SCROLL_THUMBTRACK; + break; + + default: + nScrollInc = 0; } - if (nScrollInc != 0) + // don't process the event if there is no displacement, + // unless this is a thumb release event. + if (( nScrollInc == 0 ) && ( scrollEvent != wxEVT_SCROLL_THUMBRELEASE )) { - int new_pos = position + nScrollInc; - - if (new_pos < 0) - new_pos = 0; - if (new_pos > maxPos) - new_pos = maxPos; - - SetValue(new_pos); - wxScrollEvent event(scrollEvent, m_windowId); - event.SetPosition(new_pos); - event.SetEventObject( this ); - GetEventHandler()->ProcessEvent(event); + return FALSE; } -} -void wxScrollBar::MSWOnHScroll(WXWORD wParam, WXWORD pos, WXHWND control) -{ - MSWOnVScroll(wParam, pos, control); + int new_pos = position + nScrollInc; + + if (new_pos < 0) + new_pos = 0; + if (new_pos > maxPos) + new_pos = maxPos; + + SetThumbPosition(new_pos); + wxScrollEvent event(scrollEvent, m_windowId); + event.SetPosition(new_pos); + event.SetEventObject( this ); + + return GetEventHandler()->ProcessEvent(event); } -void wxScrollBar::SetPosition(int viewStart) +void wxScrollBar::SetThumbPosition(int viewStart) { #if defined(__WIN95__) SCROLLINFO info; @@ -212,7 +215,7 @@ void wxScrollBar::SetPosition(int viewStart) #endif } -int wxScrollBar::GetPosition(void) const +int wxScrollBar::GetThumbPosition(void) const { return ::GetScrollPos((HWND)m_hWnd, SB_CTL); } @@ -233,7 +236,7 @@ void wxScrollBar::SetScrollbar(int position, int thumbSize, int range, int pageS // (see comment for SetPageLength) if ( m_pageSize > 1 ) { - range1 += (m_pageSize - 1); + range1 += (m_pageSize - 1); } SCROLLINFO info; @@ -291,7 +294,7 @@ void wxScrollBar::SetObjectLength(int objectLength) // (see comment for SetPageLength) if ( m_pageSize > 1 ) { - range += (m_pageSize - 1); + range += (m_pageSize - 1); } SCROLLINFO info; @@ -324,14 +327,14 @@ void wxScrollBar::GetValues(int *viewStart, int *viewLength, int *objectLength, #endif WXHBRUSH wxScrollBar::OnCtlColor(WXHDC pDC, WXHWND pWnd, WXUINT nCtlColor, - WXUINT message, WXWPARAM wParam, WXLPARAM lParam) + WXUINT message, WXWPARAM wParam, WXLPARAM lParam) { return 0; } void wxScrollBar::Command(wxCommandEvent& event) { - SetValue(event.m_commandInt); + SetThumbPosition(event.m_commandInt); ProcessCommand(event); }