Processing Window Scrolling Messages
When processing the scrolling message, the user should set the painting offsets to reflect the new coordinate translations.
The following example shows how to handle the horizontal scrolling message:
// This is example asumes, that we have a valid LEAD paint handle and a valid
// LEAD bitmap handle, and the user has initialzied the current horizontal
// and vertical scrolling position variables
BITMAPHANDLE g_PaintBitmap ;
RECT g_rcBitmapView ;
int g_nHScrollPos ;
int g_nVScrollPos ;
L_VOID OnHScroll ( HWND hWnd, HWND hWndCtl, L_UINT nCode, L_INT nPos )
{
SCROLLINFO si ;
PAINTXFORM PntXForm ;
UNREFERENCED_PARAMETER ( nPos ) ;
UNREFERENCED_PARAMETER ( hWndCtl ) ;
si.cbSize = sizeof ( SCROLLINFO ) ;
si.fMask = SIF_ALL ;
GetScrollInfo ( hWnd, SB_HORZ, &si ) ;
g_nHScrollPos = si.nPos ;
switch ( nCode )
{
case SB_LINELEFT:
si.nPos -= 1 ;
break ;
case SB_LINERIGHT:
si.nPos += 1 ;
break ;
case SB_PAGELEFT:
si.nPos -= si.nPage ;
break ;
case SB_PAGERIGHT:
si.nPos += si.nPage ;
break ;
case SB_THUMBTRACK:
si.nPos = si.nTrackPos ;
break ;
default:
break ;
}
si.fMask = SIF_POS ;
SetScrollInfo ( hWnd, SB_HORZ, &si, TRUE ) ;
GetScrollInfo ( hWnd, SB_HORZ, &si ) ;
if ( si.nPos != g_nHScrollPos )
{
// update screen.
OffsetRect ( &g_rcBitmapView, ( g_nHScrollPos - si.nPos ), 0 ) ;
ScrollWindow ( hWnd, ( g_nHScrollPos - si.nPos ), 0, NULL, NULL ) ;
g_nHScrollPos = si.nPos ;
UpdateWindow ( hWnd ) ;
// set Painting Transformation.
PntXForm.nZoom = 100 ;
PntXForm.nXOffset = - g_rcBitmapView.left ;
PntXForm.nYOffset = - g_rcBitmapView.top ;
L_PntSetTransformation ( g_pPaintHandle, &PntXForm ) ;
}
}