Container Offsets:

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 when 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 scroll 
      GetScrollInfo(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); 
} 

Help Version 19.0.2017.10.27
Products | Support | Contact Us | Copyright Notices
© 1991-2017 LEAD Technologies, Inc. All Rights Reserved.
LEADTOOLS Container and Automation C API Help