drvGradientFill 函数 (winddi.h)

DrvGradientFill 函数对指定的基元进行着色。

语法

BOOL DrvGradientFill(
  [in, out]      SURFOBJ   *psoDest,
  [in]           CLIPOBJ   *pco,
  [in, optional] XLATEOBJ  *pxlo,
  [in]           TRIVERTEX *pVertex,
  [in]           ULONG     nVertex,
  [in]           PVOID     pMesh,
  [in]           ULONG     nMesh,
  [in]           RECTL     *prclExtents,
  [in]           POINTL    *pptlDitherOrg,
  [in]           ULONG     ulMode
);

参数

[in, out] psoDest

指向 SURFOBJ 结构的指针,该结构标识要绘制的图面。

[in] pco

指向 CLIPOBJ 结构的指针。 提供 CLIPOBJ_Xxx 服务例程以一组矩形的形式枚举 剪辑区域 。 此枚举限制修改的目标区域。 GDI 尽可能简化涉及的剪裁。

[in, optional] pxlo

指向 XLATEOBJ 结构的指针。 驱动程序应忽略此参数。

[in] pVertex

指向 TRIVERTEX 结构数组的指针,其中每个条目都包含位置和颜色信息。 MICROSOFT WINDOWS SDK文档中介绍了 TRIVERTEX 结构。

[in] nVertex

指定 数组中 pVertex 指向的 TRIVERTEX 结构的数目。

[in] pMesh

指向结构的数组的指针,这些结构定义 pVertex 指向的 TRIVERTEX 元素的连接。

绘制矩形时, pMesh 指向GRADIENT_RECT结构的数组,其中每个结构指定两个定义矩形的 TRIVERTEX 元素。 TRIVERTEX 元素可以表示任何对角相对的矩形顶点对。 矩形绘图在右下角是独占的。 TRIVERTEX 和 GRADIENT_RECT 均在 Windows SDK 文档中定义。

绘制三角形时, pMesh 指向GRADIENT_TRIANGLE结构的数组,其中每个结构指定定义三角形的三个 TRIVERTEX 元素。 三角形绘图在右下角是独占的。 Windows SDK文档中定义了GRADIENT_TRIANGLE。

[in] nMesh

指定 数组中 pMesh 指向的元素数。

[in] prclExtents

指向 RECTL 结构的指针,该结构定义渐变绘制所在的区域。 这些点在目标图面的坐标系中指定。 此参数可用于估算绘图操作的大小。

[in] pptlDitherOrg

指向 POINTL 结构的指针,该结构定义图面上的原点进行抖减。 抖变图案的左上角像素与此点对齐。

[in] ulMode

指定当前绘制模式以及如何解释 pMesh 指向的数组。 此参数可能是以下值之一:

GRADIENT_FILL_RECT_H

pMesh 参数指向GRADIENT_RECT结构的数组。 每个矩形都将从左到右进行着色。 具体而言,左上角和左下角像素的颜色与右上角和右下角像素的颜色相同。

GRADIENT_FILL_RECT_V

pMesh 参数指向GRADIENT_RECT结构的数组。 每个矩形都将从上到下进行着色。 具体而言,左上角和右上方像素的颜色相同,左下角和右下角像素也相同。

GRADIENT_FILL_TRIANGLE

pMesh 参数指向GRADIENT_TRIANGLE结构的数组。

每个模式的 渐变填充 计算记录在“备注”部分中。

返回值

成功后,DrvGradientFill 返回 TRUE 。 否则,它将返回 FALSE ,并通过调用 EngSetLastError 报告错误。

注解

DrvGradientFill 可以选择在图形驱动程序中实现。 GDI 从不对托盘化表面调用此函数。

驱动程序在调用 EngAssociateSurface 或 EngModifySurface 时通过设置 HOOK_GRADIENTFILL 标志来挂钩 DrvGradientFill 如果驱动程序已挂钩 DrvGradientFill 并被调用以执行它不支持的操作,则驱动程序应让 GDI 通过对 EngGradientFill 的调用中的数据来处理该操作。

GDI 不会对 8bpp 目标图面调用 DrvGradientFill

用于计算基元每个像素的颜色值的公式取决于 ulMode ,如下所示:

所有三个颜色通道累计的总误差不得超过 8 (8) 。 有关允许的错误的详细信息,请参阅 显示驱动程序中的特殊效果

驱动程序应忽略顶点的 alpha 值,使支持 alpha 混合的图面的 alpha 通道保持不变。

要求

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

另请参阅

EngAssociateSurface

EngGradientFill