When processing the scrolling message for a window that owns a container associated with an automation handle, the user must set the container offsets. This can be done using L_ContainerSetOffset.
The following example shows how to do this for the WM_SIZE message:
static L_VOID OnSize(HWND hWnd,pCONTAINERHANDLE pContainer,pBITMAPHANDLE pBitmap,LPRECT prcView,L_INT cx,L_INT cy,L_INT nZoom,L_INT *pnHScroll, /*last horizontal scroll position*/L_INT *pnVScroll /*last vertical scroll position*/){SCROLLINFO si;L_INT nXOffset, nYOffset;if (NULL != pBitmap && pBitmap->Flags.Allocated){si.cbSize = sizeof(SCROLLINFO);si.fMask = SIF_ALL;// vertical scroll.GetScrollInfo(hWnd, SB_VERT, &si);si.nMin = 0;si.nMax = BITMAPHEIGHT(pBitmap);si.nPage = MulDiv(cy, 100, nZoom);SetScrollInfo(hWnd, SB_VERT, &si, TRUE);GetScrollInfo(hWnd, SB_VERT, &si);*pnVScroll = si.nPos;// horizontal scrollGetScrollInfo(hWnd, SB_HORZ, &si);si.nMin = 0;si.nMax = BITMAPWIDTH(pBitmap);si.nPage = MulDiv(cx, 100, nZoom);SetScrollInfo(hWnd, SB_HORZ, &si, TRUE);GetScrollInfo(hWnd, SB_HORZ, &si);*pnHScroll = si.nPos;}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);*pnHScroll = 0;*pnVScroll = 0;}// set the painting rectangle.SetRect(prcView, 0, 0, BITMAPWIDTH(pBitmap), BITMAPHEIGHT(pBitmap));if (nZoom < 100){nXOffset = MulDiv(*pnHScroll, 100, nZoom);nYOffset = MulDiv(*pnVScroll, 100, nZoom);}else{nXOffset = *pnHScroll;nYOffset = *pnVScroll;}OffsetRect(prcView, -nXOffset, -nYOffset);prcView->left = MulDiv(prcView->left, nZoom, 100);prcView->top = MulDiv(prcView->top, nZoom, 100);prcView->right = MulDiv(prcView->right, nZoom, 100);prcView->bottom = MulDiv(prcView->bottom, nZoom, 100);L_ContainerSetOffset(pContainer, -prcView->left, -prcView->top, 0);}