Sets the container coordinates offset values.
#include "LtCon.h"
L_LTCON_API L_INT L_ContainerSetOffset(pContainer, nXOffset, nYOffset, nZOffset)
Pointer to a container handle.
The X offset of the external representation.
The Y offset of the external representation.
The Z offset of the external representation.
Value | Meaning |
---|---|
SUCCESS | The function was successful. |
< 1 | An error occurred. Refer to Return Codes. |
The user should set the offset every time the window that owns the container is scrolled. When assigning an external representation to the container, every point (Xa, Ya) in the external representation is transformed by the container to the point (Xc, Yc) by using the following steps:
Add offsets:
Xb = Xa + nXOffset
Multiply by scalars:
Xc = (Xb * nXScalarNum) / nXScalarDen
Yc = (Yb * nYScalarNum) / nYScalarDen
The default offset values are nXOffset=0, nYOffset=0, and nZOffset=0.
This will show to modify the container coordinates offset values to reflect the changes in the window offset.
L_INT ContainerSetOffsetExample(HWND hWnd,
pCONTAINERHANDLE pContainer,
pBITMAPHANDLE pBitmap,
LPRECT prcView,
L_INT cx,
L_INT cy,
L_INT nZoom,
L_INT* pnHScroll,
L_INT* pnVScroll)
{
L_INT nRet;
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 rectangel.
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 ) ;
nRet = L_ContainerSetOffset ( pContainer, - prcView->left, - prcView->top, 0 ) ;
return nRet;
}