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) |