_PAGEDOWN, 0) ; break ; } return 0 ;
case WM_MOUSEWHEEL: if (iDeltaPerLine == 0) break ;
iAccumDelta += (short) HIWORD (wParam) ; // 120 or -120
while (iAccumDelta >= iDeltaPerLine) { SendMessage (hwnd, WM_VSCROLL, SB_LINEUP, 0) ; iAccumDelta -= iDeltaPerLine ; }
while (iAccumDelta <= -iDeltaPerLine) { SendMessage (hwnd, WM_VSCROLL, SB_LINEDOWN, 0) ; iAccumDelta += iDeltaPerLine ; }
return 0 ;
case WM_PAINT : hdc = BeginPaint (hwnd, &ps) ;
// Get vertical scroll bar position
si.cbSize = sizeof (si) ; si.fMask = SIF_POS ; GetScrollInfo (hwnd, SB_VERT, &si) ; iVertPos = si.nPos ;
// Get horizontal scroll bar position
GetScrollInfo (hwnd, SB_HORZ, &si) ; iHorzPos = si.nPos ;
// Find painting limits
iPaintBeg = max (0, iVertPos + ps.rcPaint.top / cyChar) ; iPaintEnd = min (NUMLINES - 1, iVertPos + ps.rcPaint.bottom / cyChar) ; for (i = iPaintBeg ; i <= iPaintEnd ; i++) { x = cxChar * (1 - iHorzPos) ; y = cyChar * (i - iVertPos) ; TextOut ( hdc, x, y, sysmetrics[i].szLabel, lstrlen (sysmetrics[i].szLabel)) ; TextOut ( hdc, |