drvMovePointer 函数 (winddi.h)
DrvMovePointer 函数将指针移动到新位置,并确保 GDI 不会干扰指针的显示。
语法
void DrvMovePointer(
[in] SURFOBJ *pso,
[in] LONG x,
[in] LONG y,
[in] RECTL *prcl
);
参数
[in] pso
指向描述显示设备表面的 SURFOBJ 结构的指针。
[in] x
指定显示器上的 x 坐标,驱动程序应在其中放置指针的热点。
负 x 值指示驱动程序应从显示器中删除指针,因为绘图即将出现在它当前所在的位置。 如果指针已从显示器中删除,并且 x 值为非否定,则驱动程序应还原指针。
[in] y
指定显示器上的 y 坐标,驱动程序应在其中放置指针的热点。
当驱动程序在 DEVINFO 结构中设置了GCAPS_PANNING标志时,负 y 值指示 GDI 调用此函数只是为了通知驱动程序光标的当前位置。 当前位置可以计算为 (x、y+pso-sizlBitmap.cy) >。 未设置 GCAPS_PANNING 标志的驱动程序永远不会收到负 y 坐标。
[in] prcl
指向 RECTL 结构的指针,该结构定义一个区域,该区域绑定受指针在显示器上影响的所有像素。 如果不首先从屏幕中删除指针,GDI 将不会在此矩形中绘制。 此参数可以为 NULL。
返回值
无
备注
驱动程序有时需要知道指针在屏幕上的当前位置 , 即使 GDI 正在模拟指针 (以便驱动程序不再获得正常的 DrvMovePointer 调用) , 以便处理平移虚拟显示器。 若要接收此通知,驱动程序应在 DEVINFO 结构的 flGraphicsCaps 字段中设置GCAPS_PANNING标志。
在显示驱动程序中绘制任何线程时,不会调用 DrvMovePointer,除非在 DEVINFO 的 flGraphicsCaps 成员中设置了GCAPS_ASYNCMOVE标志。
只有在也实现 DrvSetPointerShape 时,才必须在显示驱动程序中实现 DrvMovePointer。
如果驱动程序已使用 DrvSetPointerShape 注册了指定的指针, 则 DrvMovePointer 不得失败。
要求
要求 | 值 |
---|---|
目标平台 | 桌面 |
标头 | winddi.h (包括 Winddi.h) |