LRESULT CALLBACK ListViewWndProc( HWND hWndLV, UINT message, WPARAM wParam, LPARAM lParam) { static int iOldThumb = 0; static int iPageSize; // in rows static int iItemCount; static SCROLLINFO si; si.fMask = SIF_ALL; si.cbSize = sizeof si; switch(message) { ... case WM_VSCROLL: switch (LOWORD(wParam)) { case SB_ENDSCROLL: return 0; case SB_THUMBPOSITION: { int iNewThumb = si.nTrackPos, idx; idx = (iNewThumb >= iOldThumb ? min(iItemCount - 1, iNewThumb + iPageSize - 1) : iNewThumb); ListView_EnsureVisible(hWndLV,idx,FALSE); iOldThumb = idx; return 0; } // Don't scroll,just keep track of thumb position case SB_THUMBTRACK: GetScrollInfo(hWndLV,SB_VERT,&si); return 0; default:break; } break; default :; } return CallWindowProc(g_pfnOldLVProc, hWndLV, message, wParam, lParam); } //End of File