use full 32 bit range when dragging a scrollbar (fixes bug 414986)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/branches/WX_2_4_BRANCH@17280 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -122,9 +122,40 @@ wxScrollBar::~wxScrollBar(void)
|
|||||||
bool wxScrollBar::MSWOnScroll(int WXUNUSED(orientation), WXWORD wParam,
|
bool wxScrollBar::MSWOnScroll(int WXUNUSED(orientation), WXWORD wParam,
|
||||||
WXWORD pos, WXHWND control)
|
WXWORD pos, WXHWND control)
|
||||||
{
|
{
|
||||||
int position = ::GetScrollPos((HWND) control, SB_CTL);
|
// current and max positions
|
||||||
int minPos, maxPos;
|
int position,
|
||||||
::GetScrollRange((HWND) control, SB_CTL, &minPos, &maxPos);
|
maxPos;
|
||||||
|
|
||||||
|
#ifdef __WIN32__
|
||||||
|
// when we're dragging the scrollbar we can't use pos parameter because it
|
||||||
|
// is limited to 16 bits
|
||||||
|
if ( wParam == SB_THUMBPOSITION || wParam == SB_THUMBTRACK )
|
||||||
|
{
|
||||||
|
SCROLLINFO scrollInfo;
|
||||||
|
wxZeroMemory(scrollInfo);
|
||||||
|
scrollInfo.cbSize = sizeof(SCROLLINFO);
|
||||||
|
|
||||||
|
// also get the range if we call GetScrollInfo() anyhow -- this is less
|
||||||
|
// expensive than call it once here and then call GetScrollRange()
|
||||||
|
// below
|
||||||
|
scrollInfo.fMask = SIF_RANGE | SIF_POS | SIF_TRACKPOS;
|
||||||
|
|
||||||
|
if ( !::GetScrollInfo(GetHwnd(), SB_CTL, &scrollInfo) )
|
||||||
|
{
|
||||||
|
wxLogLastError(_T("GetScrollInfo"));
|
||||||
|
}
|
||||||
|
|
||||||
|
pos = scrollInfo.nTrackPos;
|
||||||
|
position = scrollInfo.nPos;
|
||||||
|
maxPos = scrollInfo.nMax;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif // Win32
|
||||||
|
{
|
||||||
|
position = ::GetScrollPos((HWND) control, SB_CTL);
|
||||||
|
int minPos;
|
||||||
|
::GetScrollRange((HWND) control, SB_CTL, &minPos, &maxPos);
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(__WIN95__)
|
#if defined(__WIN95__)
|
||||||
// A page size greater than one has the effect of reducing the effective
|
// A page size greater than one has the effect of reducing the effective
|
||||||
@@ -217,16 +248,16 @@ bool wxScrollBar::MSWOnScroll(int WXUNUSED(orientation), WXWORD wParam,
|
|||||||
void wxScrollBar::SetThumbPosition(int viewStart)
|
void wxScrollBar::SetThumbPosition(int viewStart)
|
||||||
{
|
{
|
||||||
#if defined(__WIN95__)
|
#if defined(__WIN95__)
|
||||||
SCROLLINFO info;
|
SCROLLINFO info;
|
||||||
info.cbSize = sizeof(SCROLLINFO);
|
info.cbSize = sizeof(SCROLLINFO);
|
||||||
info.nPage = 0;
|
info.nPage = 0;
|
||||||
info.nMin = 0;
|
info.nMin = 0;
|
||||||
info.nPos = viewStart;
|
info.nPos = viewStart;
|
||||||
info.fMask = SIF_POS ;
|
info.fMask = SIF_POS ;
|
||||||
|
|
||||||
::SetScrollInfo((HWND) GetHWND(), SB_CTL, &info, TRUE);
|
::SetScrollInfo((HWND) GetHWND(), SB_CTL, &info, TRUE);
|
||||||
#else
|
#else
|
||||||
::SetScrollPos((HWND) GetHWND(), SB_CTL, viewStart, TRUE);
|
::SetScrollPos((HWND) GetHWND(), SB_CTL, viewStart, TRUE);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user