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.

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 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 21.0.2021.4.7
Products | Support | Contact Us | Intellectual Property Notices
© 1991-2021 LEAD Technologies, Inc. All Rights Reserved.

LEADTOOLS Container and Automation C API Help