When the owner window of the container has been scrolled horizontally or vertically the container should be notified about the change so it can adjust the coordinates accordingly.
To set the offset values for the container, call L_ContainerSetOffset.
To determine the current offset values, call L_ContainerGetOffset.
This can often be handled while processing the WM\_HSCROLL, WM\_SIZE, and WM\_VSCROLL messages.
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);}