changed handling of range/max scrolling parameter and cleanup (removed Win16 code)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@20595 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2003-05-12 08:33:48 +00:00
parent 5eae641dd6
commit 0cf5de1133

View File

@@ -696,11 +696,15 @@ void wxWindowMSW::MSWDeviceToLogical (float *x, float *y) const
// scrolling stuff
// ---------------------------------------------------------------------------
// convert wxHORIZONTAL/wxVERTICAL to SB_HORZ/SB_VERT
static inline wxDirToWinStyle(int orient)
{
return orient == wxHORIZONTAL ? SB_HORZ : SB_VERT;
}
#if WXWIN_COMPATIBILITY
void wxWindowMSW::SetScrollRange(int orient, int range, bool refresh)
{
#if defined(__WIN95__)
int range1 = range;
// Try to adjust the range to cope with page size > 1
@@ -711,106 +715,31 @@ void wxWindowMSW::SetScrollRange(int orient, int range, bool refresh)
range1 += (pageSize - 1);
}
SCROLLINFO info;
int dir;
if ( orient == wxHORIZONTAL ) {
dir = SB_HORZ;
} else {
dir = SB_VERT;
}
info.cbSize = sizeof(SCROLLINFO);
WinStruct<SCROLLINFO> info;
info.nPage = pageSize; // Have to set this, or scrollbar goes awry
info.nMin = 0;
info.nMax = range1;
info.nPos = 0;
info.fMask = SIF_RANGE | SIF_PAGE;
HWND hWnd = GetHwnd();
if ( hWnd )
::SetScrollInfo(hWnd, dir, &info, refresh);
#else
int wOrient;
if ( orient == wxHORIZONTAL )
wOrient = SB_HORZ;
else
wOrient = SB_VERT;
HWND hWnd = GetHwnd();
if ( hWnd )
::SetScrollRange(hWnd, wOrient, 0, range, refresh);
#endif
::SetScrollInfo(hWnd, wxDirToWinStyle(orient), &info, refresh);
}
void wxWindowMSW::SetScrollPage(int orient, int page, bool refresh)
{
#if defined(__WIN95__)
SCROLLINFO info;
int dir;
if ( orient == wxHORIZONTAL ) {
dir = SB_HORZ;
m_xThumbSize = page;
} else {
dir = SB_VERT;
m_yThumbSize = page;
}
info.cbSize = sizeof(SCROLLINFO);
WinStruct<SCROLLINFO> info;
info.nPage = page;
info.nMin = 0;
info.fMask = SIF_PAGE;
HWND hWnd = GetHwnd();
if ( hWnd )
::SetScrollInfo(hWnd, dir, &info, refresh);
#else
if ( orient == wxHORIZONTAL )
m_xThumbSize = page;
else
m_yThumbSize = page;
#endif
}
int wxWindowMSW::OldGetScrollRange(int orient) const
{
int wOrient;
if ( orient == wxHORIZONTAL )
wOrient = SB_HORZ;
else
wOrient = SB_VERT;
#if __WATCOMC__ && defined(__WINDOWS_386__)
short minPos, maxPos;
#else
int minPos, maxPos;
#endif
HWND hWnd = GetHwnd();
if ( hWnd )
{
::GetScrollRange(hWnd, wOrient, &minPos, &maxPos);
#if defined(__WIN95__)
// Try to adjust the range to cope with page size > 1
// - a Windows API quirk
int pageSize = GetScrollPage(orient);
if ( pageSize > 1 )
{
maxPos -= (pageSize - 1);
}
#endif
return maxPos;
}
else
return 0;
::SetScrollInfo(hWnd, wxDirToWinStyle(orient), &info, refresh);
}
int wxWindowMSW::GetScrollPage(int orient) const
{
if ( orient == wxHORIZONTAL )
return m_xThumbSize;
else
return m_yThumbSize;
return orient == wxHORIZONTAL ? m_xThumbSize : m_yThumbSize;
}
#endif // WXWIN_COMPATIBILITY
@@ -826,61 +755,31 @@ inline int GetScrollPosition(HWND hWnd, int wOrient)
int wxWindowMSW::GetScrollPos(int orient) const
{
int wOrient;
if ( orient == wxHORIZONTAL )
wOrient = SB_HORZ;
else
wOrient = SB_VERT;
HWND hWnd = GetHwnd();
wxCHECK_MSG( hWnd, 0, _T("no HWND in GetScrollPos") );
return GetScrollPosition(hWnd, wOrient);
return GetScrollPosition(hWnd, orient == wxHORIZONTAL ? SB_HORZ : SB_VERT);
}
// This now returns the whole range, not just the number
// of positions that we can scroll.
int wxWindowMSW::GetScrollRange(int orient) const
{
int wOrient;
if ( orient == wxHORIZONTAL )
wOrient = SB_HORZ;
else
wOrient = SB_VERT;
#if __WATCOMC__ && defined(__WINDOWS_386__)
short minPos, maxPos;
#else
int minPos, maxPos;
#endif
HWND hWnd = GetHwnd();
if ( hWnd )
{
::GetScrollRange(hWnd, wOrient, &minPos, &maxPos);
#if defined(__WIN95__)
// Try to adjust the range to cope with page size > 1
// - a Windows API quirk
int pageSize = GetScrollThumb(orient);
if ( pageSize > 1 )
{
maxPos -= (pageSize - 1);
}
// October 10th: new range concept.
maxPos += pageSize;
#endif
return maxPos;
}
else
if ( !hWnd )
return 0;
::GetScrollRange(hWnd, orient == wxHORIZONTAL ? SB_HORZ : SB_VERT,
&minPos, &maxPos);
// undo "range - 1" done in SetScrollbar()
return maxPos + 1;
}
int wxWindowMSW::GetScrollThumb(int orient) const
{
if ( orient == wxHORIZONTAL )
return m_xThumbSize;
else
return m_yThumbSize;
return orient == wxHORIZONTAL ? m_xThumbSize : m_yThumbSize;
}
void wxWindowMSW::SetScrollPos(int orient, int pos, bool refresh)
@@ -888,77 +787,38 @@ void wxWindowMSW::SetScrollPos(int orient, int pos, bool refresh)
HWND hWnd = GetHwnd();
wxCHECK_RET( hWnd, _T("SetScrollPos: no HWND") );
int dir = orient == wxHORIZONTAL ? SB_HORZ : SB_VERT;
#if defined(__WIN95__)
SCROLLINFO info;
info.cbSize = sizeof(SCROLLINFO);
WinStruct<SCROLLINFO> info;
info.nPage = 0;
info.nMin = 0;
info.nPos = pos;
info.fMask = SIF_POS;
::SetScrollInfo(hWnd, dir, &info, refresh);
#else // !__WIN95__
::SetScrollPos(hWnd, dir, pos, refresh);
#endif // __WIN95__/!__WIN95__
::SetScrollInfo(hWnd, orient == wxHORIZONTAL ? SB_HORZ : SB_VERT,
&info, refresh);
}
// New function that will replace some of the above.
void wxWindowMSW::SetScrollbar(int orient, int pos, int thumbVisible,
int range, bool refresh)
void wxWindowMSW::SetScrollbar(int orient,
int pos,
int pageSize,
int range,
bool refresh)
{
#if defined(__WIN95__)
int oldRange = range - thumbVisible;
int range1 = oldRange;
// Try to adjust the range to cope with page size > 1
// - a Windows API quirk
int pageSize = thumbVisible;
if ( pageSize > 1 && range > 0)
{
range1 += (pageSize - 1);
}
SCROLLINFO info;
int dir;
if ( orient == wxHORIZONTAL ) {
dir = SB_HORZ;
} else {
dir = SB_VERT;
}
info.cbSize = sizeof(SCROLLINFO);
info.nPage = pageSize; // Have to set this, or scrollbar goes awry
info.nMin = 0;
info.nMax = range1;
WinStruct<SCROLLINFO> info;
info.nPage = pageSize;
info.nMin = 0; // range is nMax - nMin + 1
info.nMax = range - 1; // as both nMax and nMax are inclusive
info.nPos = pos;
info.fMask = SIF_RANGE | SIF_PAGE | SIF_POS;
HWND hWnd = GetHwnd();
if ( hWnd )
::SetScrollInfo(hWnd, dir, &info, refresh);
#else
int wOrient;
if ( orient == wxHORIZONTAL )
wOrient = SB_HORZ;
else
wOrient = SB_VERT;
HWND hWnd = GetHwnd();
if ( hWnd )
{
::SetScrollRange(hWnd, wOrient, 0, range, FALSE);
::SetScrollPos(hWnd, wOrient, pos, refresh);
}
#endif
if ( orient == wxHORIZONTAL ) {
m_xThumbSize = thumbVisible;
} else {
m_yThumbSize = thumbVisible;
::SetScrollInfo(hWnd, orient == wxHORIZONTAL ? SB_HORZ : SB_VERT,
&info, refresh);
}
*(orient == wxHORIZONTAL ? &m_xThumbSize : &m_yThumbSize) = pageSize;
}
void wxWindowMSW::ScrollWindow(int dx, int dy, const wxRect *prect)
@@ -4627,9 +4487,7 @@ bool wxWindowMSW::MSWOnScroll(int orientation, WXWORD wParam,
// be done only for these two SB_ events as they are the only one
// carrying the scrollbar position)
{
SCROLLINFO scrollInfo;
wxZeroMemory(scrollInfo);
scrollInfo.cbSize = sizeof(SCROLLINFO);
WinStruct<SCROLLINFO> scrollInfo;
scrollInfo.fMask = SIF_TRACKPOS;
if ( !::GetScrollInfo(GetHwnd(),