Whenever an external event that will affect the painting output occurs, the user must adjust the affected controlling factors. The following example demonstrates changes made while processing the WM_SIZE message.
// This is example assumes, that we have a valid LEAD paint handle and a valid
// LEAD bitmap handle, and the user has set the bitmap handle in the paint handle
// ( through the L_PntSetMetrics function ). And also assumes that user has initialized the
// current horizontal and vertical scrolling position variables
BITMAPHANDLE g_PaintBitmap ;
RECT g_rcBitmapView ;
int g_nHScrollPos ;
int g_nVScrollPos ;
L_VOID OnSize ( HWND hWnd, L_UINT nState, L_INT nCx, L_INT nCy )
{
SCROLLINFO si ;
UNREFERENCED_PARAMETER ( nState ) ;
if ( g_PaintBitmap.Flags.Allocated )
{
si.cbSize = sizeof ( SCROLLINFO ) ;
si.fMask = SIF_ALL ;
// vertical scroll.
GetScrollInfo ( hWnd, SB_VERT, &si ) ;
si.nMin = 0 ;
si.nMax = BITMAPHEIGHT ( &g_PaintBitmap ) ;
si.nPage = nCy ;
SetScrollInfo ( hWnd, SB_VERT, &si, TRUE ) ;
GetScrollInfo ( hWnd, SB_VERT, &si ) ;
g_nVScrollPos = si.nPos ;
// horizontal scroll
GetScrollInfo ( hWnd, SB_HORZ, &si ) ;
si.nMin = 0 ;
si.nMax = BITMAPWIDTH ( &g_PaintBitmap ) ;
si.nPage = nCx ;
SetScrollInfo ( hWnd, SB_HORZ, &si, TRUE ) ;
GetScrollInfo ( hWnd, SB_HORZ, &si ) ;
g_nHScrollPos = si.nPos ;
// set the painting rectangel.
SetRect ( &g_rcBitmapView, 0, 0, BITMAPWIDTH ( &g_PaintBitmap ), BITMAPHEIGHT ( &g_PaintBitmap ) ) ;
OffsetRect ( &g_rcBitmapView, - g_nHScrollPos, - g_nVScrollPos ) ;
}
else
{
si.cbSize = sizeof ( SCROLLINFO ) ;
si.fMask = SIF_RANGE ;
si.nMin = 0 ;
si.nMax = 0 ;
SetScrollInfo ( hWnd, SB_VERT, &si, TRUE ) ;
SetScrollInfo ( hWnd, SB_HORZ, &si, TRUE ) ;
SetRectEmpty ( &g_rcBitmapView ) ;
}
if ( GetFocus ( ) == hWnd )
{
PAINTXFORM PntXForm ;
RECT rcDCRect ;
// set the paint tools DC extents.
SetRect ( &rcDCRect, 0, 0, nCx, nCy ) ;
L_PntSetDCExtents ( pPaint, &rcDCRect ) ;
// set Painting Transformation.
PntXForm.nZoom = 100 ;
PntXForm.nXOffset = - g_rcBitmapView.left ;
PntXForm.nYOffset = - g_rcBitmapView.top ;
L_PntSetTransformation ( g_pPaintHandle, &PntXForm ) ;
}
}
This example uses the following functions:
The WM_SIZE message indicates that the dimensions of the DC (the window's client area DC) have changed. This DC will be used for future painting. The new dimensions of the DC should be set by calling L_PntSetDCExtents.
The L_PntSetTransformation function is called here to set the toolkit transformation values properly.