# include“l_bitmap.h”
L_LTDIS_APIL_INTL_SetMagGlassOwnerDrawCallback (hWnd, pfnCallback pUserData)
设置一个回调函数,它可以让用户提供自定义的放大镜呈现。
的处理窗口的放大镜。
回调函数被称为每次放大镜需要重新粉刷。
回调函数必须遵守所描述的函数原型MAGGLASSOWNERDRAWCALLBACK函数。
空指针,您可以使用它通过一个或多个回调函数需要额外的参数。
要使用该功能,赋值给一个变量或创建一个结构,其中包含你需要的尽可能多的领域。然后,在这个参数,通过变量的地址或结构,铸造L_VOID *。回调函数,接收地址的pUserData参数,可以把它适当的数据类型的指针来访问变量或结构。
如果不需要额外的参数,该参数可以传递NULL。
价值 | 意义 |
---|---|
成功 | 函数是成功的。 |
< 1 | 一个错误发生。指返回代码。 |
如果设置了一个用户定义的回调函数通过调用L_SetMagGlassOwnerDrawCallback,之后L_StartMagGlass被称为直流和放大镜油漆本身,但在放大镜显示在屏幕上,用户可以改变什么是直流的,通过用户定义的回调函数。这允许用户提供自定义渲染的放大镜。例如,该功能允许您呈现放大的注释,这可能是覆盖当前显示图像,或者只是简单地覆盖目前在放大镜显示区域。
必需的dll和库
x64 Win32。
请注意,这不是一个完整的示例!
这是一段注释的演示程序。
完整的代码,参考ANNOTATE.C。
/ * <结构体> * /
# ifdef LET_DEFINE
类型定义结构体_MAGCHILDDATA
{
intcxClient;客户区* / / *宽度
intcyClient;/ *客户区* /的高度
intnHScrollPos;/ * x滚动位置* /
intnVScrollPos;* / / * y滚动位置
intnHScrollMax;* / / *最大x滚动位置
intnVScrollMax;/ *最大y滚动位置* /
intnHScrollStep;/ * x滚动的一步价值* /
intnVScrollStep;/ * y滚动的一步价值* /
BOOL bThumbTrack;
BOOL fFitImage;
intnZoom;
矩形rcView;
矩形rcClient;
矩形rcWindow;
BITMAPHANDLE位图;
HPALETTE HPALETTE;
HANNOBJECT hContainer;
HANNOBJECT hAutomation;
BOOL fInScroll;
BOOL fShowLock;
HANNOBJECT hRect;
HANNOBJECT hEllipse;
BOOL fCapture;
BOOL fLeftButtonDown;
点pt0;
BOOL bMagGlass;
L_INT nMagWidth;
L_INT nMagHeight;
L_INT nMagZoom;
L_BOOL bDoubleBuffer;
L_HANDLE hDoubleBuffer;
}MAGCHILDDATA,远* LPMAGCHILDDATA;
# endif
/ * < /结构体> * /
L_INT EXT_CALLBACK MagGlassOwnerDrawCallback (L_HWND hWnd,
HDC hMemDC,
L_INT32 nXPos,
L_INT32 nYPos,
LPRECT pMagGlass,
L_VOID * pUserData)
{
UNREFERENCED_PARAMETER (hWnd);
LPMAGCHILDDATA pData = (LPMAGCHILDDATA) pUserData;
L_DOUBLE OffsetXOld OffsetYOld;
L_DOUBLE OffsetX OffsetY;
L_DOUBLE ScalarXOld ScalarYOld;
L_DOUBLE ScalarX ScalarY;
L_DOUBLE MagCenterX MagCenterY;
L_DOUBLE BitmapX BitmapY;
L_DOUBLE MagDestX MagDestY;
矩形钢筋混凝土;
L_AnnPushFixedState (pData - > hContainer ANNFLAG_RECURSE | ANNFLAG_NOINVALIDATE);
L_AnnGetOffsetX (pData - > hContainer &OffsetXOld);
L_AnnGetOffsetY (pData - > hContainer &OffsetYOld);
L_AnnGetScalarX (pData - > hContainer &ScalarXOld);
L_AnnGetScalarY (pData - > hContainer &ScalarYOld);
MagCenterX = nXPos;
MagCenterY = nYPos;
BitmapX = (L_DOUBLE) (MagCenterX-pData - > rcView.left) / ((L_DOUBLE) (pData - > rcView。对- pData - > rcView.left) / (L_DOUBLE) BITMAPWIDTH (&pData - >位图));
BitmapY = (L_DOUBLE) (MagCenterY-pData - > rcView.top) / ((L_DOUBLE) (pData - > rcView。底- pData - > rcView.top) / (L_DOUBLE) BITMAPHEIGHT (&pData - >位图));
MagDestX = BitmapX * ((L_DOUBLE) (pData - > rcView。对- pData - > rcView.left) / (L_DOUBLE) BITMAPWIDTH (&pData - >位图))* ((L_DOUBLE) pData - > nMagZoom f / 100.0);
MagDestY = BitmapY * ((L_DOUBLE) (pData - > rcView。底- pData - > rcView.top) / (L_DOUBLE) BITMAPHEIGHT (&pData - >位图))* ((L_DOUBLE) pData - > nMagZoom f / 100.0);
OffsetX = ((L_DOUBLE) (pMagGlass - >右- pMagGlass - >左)/ 2.0 f) - MagDestX;
OffsetY = ((L_DOUBLE) (pMagGlass - >下- pMagGlass - >上)/ 2.0 f) - MagDestY;
ScalarX = (L_DOUBLE) (pData - > rcView。对- pData - > rcView.left) / (L_DOUBLE) BITMAPWIDTH (&pData - >位图)* ((L_DOUBLE) pData - > nMagZoom f / 100.0);
ScalarY = (L_DOUBLE) (pData - > rcView。底- pData - > rcView.top) / (L_DOUBLE) BITMAPHEIGHT (&pData - >位图)* ((L_DOUBLE) pData - > nMagZoom f / 100.0);
L_AnnSetOffsetX (pData - > hContainer、OffsetX ANNFLAG_NOINVALIDATE);
L_AnnSetOffsetY (pData - > hContainer、OffsetY ANNFLAG_NOINVALIDATE);
L_AnnSetScalarX (pData - > hContainer、ScalarX ANNFLAG_NOINVALIDATE);
L_AnnSetScalarY (pData - > hContainer、ScalarY ANNFLAG_NOINVALIDATE);
SetRect (rc, 0, 0, pData - > nMagWidth, pData - > nMagHeight);
L_AnnDraw (hMemDC、rc pData - > hContainer);
L_AnnSetOffsetX (pData - > hContainer、OffsetXOld ANNFLAG_NOINVALIDATE);
L_AnnSetOffsetY (pData - > hContainer、OffsetYOld ANNFLAG_NOINVALIDATE);
L_AnnSetScalarX (pData - > hContainer、ScalarXOld ANNFLAG_NOINVALIDATE);
L_AnnSetScalarY (pData - > hContainer、ScalarYOld ANNFLAG_NOINVALIDATE);
L_AnnPopFixedState (pData - > hContainer ANNFLAG_RECURSE | ANNFLAG_NOINVALIDATE);
返回成功;
}
L_INT SetMagGlassOwnerDrawCallbackExample (L_HWND hwnd, LPMAGCHILDDATA pData)
{
L_INT nRet;
MAGGLASSOPTIONS选项;
nRet = L_AnnSetActiveState (pData - > hAutomation ANNACTIVE_DISABLED);
如果(nRet ! =成功)
返回nRet;
pData - > nMagWidth = 200;
pData - > nMagHeight = 200;
pData - > nMagZoom = 200;
选项。uStructSize =运算符(MAGGLASSOPTIONS);
选项。nWidth = pData - > nMagWidth;
选项。nHeight = pData - > nMagHeight;
选项。nZoom = pData - > nMagZoom;
选项。clrPen = RGB (0, 0, 0);
选项。hMagCursor =零;
选项。clrBack = RGB (128128128);
选项。bEllipse = FALSE;
选项。nBorderSize = 1;
选项。b3D = FALSE;
选项。uPaintFlags = 0;
选项。pMask =零;
选项。uMaskCount = 0;
选项。uMagGlassFlags = CROSSHAIR_FINE;
选项。nCrosshair = 1;
选项。bIgnoreRgn = TRUE;
选项。bCenter = TRUE;
nRet = L_StartMagGlass (
hwnd,
&pData - >位图,
&pData - > rcView,
选项,
空,
pData);
如果(nRet ! =成功)
返回nRet;
nRet = L_SetMagGlassOwnerDrawCallback (hwnd, MagGlassOwnerDrawCallback pData);
如果(nRet ! =成功)
返回nRet;
pData - > bMagGlass = TRUE;
返回成功;
}
帮助收藏
光栅net|C API|c++类库|HTML5 JavaScript
文档net|C API|c++类库|HTML5 JavaScript
医疗net|C API|c++类库|HTML5 JavaScript
医疗Web查看器net
188宝金博怎么下载
支持的平台上
net, Java, Android和iOS / macOS组件
C / c++类库的API
HTML5 JavaScript库
你的邮件已经发送到支持!有人应该联系!如果你的问题是紧急请回到聊天。
聊天时间:
周一——周五,上午6点等
谢谢你的反馈!
请填写表单重新开始一个新的聊天。
所有代理目前离线。
聊天时间:
周一-周五
早上8:30 - 6点
联系我们请填写这张表格,我们将通过电子邮件联系你。