drvSetPointerShape 函数 (winddi.h)

DrvSetPointerShape 函数用于请求驱动程序将指针从显示器上移开(如果驱动程序已将其绘制在那里);尝试设置新的指针形状;和 ,将新指针放在显示器上的指定位置。

语法

ULONG DrvSetPointerShape(
  [in] SURFOBJ  *pso,
  [in] SURFOBJ  *psoMask,
  [in] SURFOBJ  *psoColor,
  [in] XLATEOBJ *pxlo,
  [in] LONG     xHot,
  [in] LONG     yHot,
  [in] LONG     x,
  [in] LONG     y,
  [in] RECTL    *prcl,
  [in] FLONG    fl
);

参数

[in] pso

指向描述要绘制的图面的 SURFOBJ 结构的指针。

[in] psoMask

指向定义 AND-XOR 掩码的 SURFOBJ 结构的指针。 (绘制单色指针中介绍了 AND-XOR 掩码。) 此位图的尺寸决定了指针的大小。 指针大小没有隐式约束,但最佳指针大小为 32 x 32、48 x 48 和 64 x 64 像素。 如果此参数为 NULL,则指针是透明的。

[in] psoColor

指向定义颜色指针颜色的 SURFOBJ 结构的指针的指针。 如果此参数为 NULL,则指针为单色。 指针位图的宽度与 psoMask 相同,高度为一半。

[in] pxlo

指向定义 psoColor 中颜色的 XLATEOBJ 结构的指针。

[in] xHot

指定指针的热点相对于其左上角像素的 x 位置。 热点指示的像素应定位在新的指针位置。

[in] yHot

指定指针的热点相对于其左上角像素的 y 位置。 热点指示的像素应定位在新的指针位置。

[in] x

指定新指针位置的 x 坐标。

[in] y

指定新指针位置的 y 坐标。

[in] prcl

指定 RECTL 结构,该结构指示驱动程序应在其中写入矩形的位置,该矩形指定指针的可见部分的紧密绑定。

[in] fl

指定一组可扩展的标志。 如果设置了任何不理解的标志,驱动程序应拒绝调用。 此参数可以是以下一个或多个预定义值,以及一个或多个驱动程序定义的值:

标志 含义
SPS_ALPHA 指针具有每像素 alpha 值。
SPS_ANIMATESTART 驱动程序应准备好接收一系列大小相近的指针形状,这些形状将构成动画指针效果。
SPS_ANIMATEUPDATE 驱动程序应在动画序列中绘制下一个指针形状。
SPS_ASYNCCHANGE 此标志已过时。 对于旧版驱动程序,仅当驱动程序能够在设备上进行其他绘图时更改硬件中的指针形状时,驱动程序才应接受更改。 仅当 DEVINFO 结构的 flGraphicsCaps 成员中设置了现已过时GCAPS_ASYNCCHANGE标志时,GDI 才使用此选项。
SPS_CHANGE 请求驱动程序更改指针形状。
SPS_FREQMASK 请求驱动程序呈现鼠标跟踪,每毫秒更新图像的次数,如表达式 fl & SPS_FREQMASK 所示。 能够呈现鼠标跟踪的驱动程序必须在其 DEVINFO 结构的 flGraphicsCaps2 成员中设置GCAPS2_MOUSETRAILS标志。
SPS_LENGTHMASK 请求驱动程序呈现表达式 fl & SPS_LENGTHMASK 所指示的长度的鼠标尾随。 (长度为 N 的鼠标跟踪由 N + 1 个光标图像组成。) 能够呈现鼠标轨迹的驱动程序必须在其 DEVINFO 结构的 flGraphicsCaps2 成员中设置GCAPS2_MOUSETRAILS标志。

返回值

返回值可以是以下值之一:

返回代码 说明
SPS_ACCEPT_EXCLUDE
已过时。 如果驱动程序返回此值,GDI 将禁用驱动程序的指针,并还原软件模拟。
SPS_ACCEPT_NOEXCLUDE
驱动程序接受形状。 硬件支持该形状,GDI 不关心其他图形覆盖指针。
SPS_DECLINE
驱动程序不支持该形状,因此 GDI 必须对其进行模拟。
SPS_ERROR
驱动程序通常支持此形状,但由于异常原因而失败。

注解

对于显示驱动程序,DrvSetPointerShape 是可选的。 但是,如果实现此函数,还必须实现 DrvMovePointer

psoMaskpsoColor 点对于唯一指针而言是唯一的 SURFOBJ 结构的 iUniq 成员。 驱动程序可以将此信息与这些结构的唯一 dhsurf 句柄结合使用,作为游标缓存的缓存键。

fl 参数中设置SPS_ALPHA时,psoMaskNULL,psoColor 指向 32bpp BGRA 图面。 每像素 alpha 值指示相应指针像素的不透明度,其下方为桌面像素。 源 alpha 格式是预乘的;也就是说,源图面的每个颜色通道都已使用相应的 alpha 值进行预乘,因此在混合时消除了乘法运算。

默认 alpha 游标大部分为黑色和白色,具有较大的 alpha 值范围;但是,没有颜色限制,因为应用程序可以自行指定任意游标。 典型的 alpha 指针尺寸比没有 alpha 的典型指针大约 8 像素。 这适用于阴影效果,这是通过模糊筛选器实现的,该筛选器扩展生成的指针位图形状。 绝大多数指针为 64x64 像素位图或更小。

驱动程序通过在 DrvEnablePDEV 返回的 DEVINFO 结构的 flGraphicsCaps2 成员中设置GCAPS2_ALPHACURSOR标志来指示其处理具有每像素 alpha 值的指针的能力。

要求

要求
目标平台 桌面
标头 winddi.h (包括 Winddi.h)

另请参阅

DrvEnablePDEV

DrvMovePointer

SURFOBJ

XLATEOBJ