void CSettingDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CRect rc;
GetWindowRect(&rc);
SCROLLINFO si = {sizeof(SCROLLINFO),
SIF_PAGE|SIF_POS|SIF_RANGE|SIF_TRACKPOS, 0, 0, 0, 0,
0};
::GetScrollInfo (m_hWnd, SB_VERT, &si);
int iInterval = 0;
int nTemp = si.nPos;
switch (nSBCode)
{
case SB_LINEUP:
nTemp = nTemp - 20;
if(nTemp < MIN_VSCROLL_VALUE)
{
nTemp = MIN_VSCROLL_VALUE;
}
break;
case SB_PAGEUP:
nTemp = nTemp - 60;
if(nTemp < MIN_VSCROLL_VALUE)
{
nTemp = MIN_VSCROLL_VALUE;
}
break;
case SB_LINEDOWN:
nTemp = nTemp + 20;
if(nTemp > MAX_VSCROLL_VALUE)
{
nTemp = MAX_VSCROLL_VALUE;
}
break;
case SB_PAGEDOWN:
nTemp = nTemp + 60;
if(nTemp > MAX_VSCROLL_VALUE)
{
nTemp = MAX_VSCROLL_VALUE;
}
break;
case SB_TOP:
nTemp = MIN_VSCROLL_VALUE;
break;
case SB_BOTTOM:
nTemp = MAX_VSCROLL_VALUE;
break;
case SB_THUMBTRACK:
case SB_THUMBPOSITION:
nTemp = si.nTrackPos;
if(nTemp > MAX_VSCROLL_VALUE)
{
nTemp = MAX_VSCROLL_VALUE;
}
break;
}
iInterval = nTemp - si.nPos;
if(0 != iInterval)
{
si.fMask = SIF_POS;
si.nPos = nTemp;
::SetScrollInfo (m_hWnd, SB_VERT, &si, TRUE);
ScrollWindowEx(0, -iInterval, NULL, NULL,
NULL, NULL, SW_SCROLLCHILDREN);
}
Invalidate();
}
水平方向上的依次类推。