Поделиться через


Функция 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, где каждая запись содержит сведения о положении и цвете. Структура TRIVERTEX описана в документации по Microsoft Windows SDK.

[in] nVertex

Указывает количество структур TRIVERTEX в массиве, на которое указывает pVertex .

[in] pMesh

Указатель на массив структур, определяющих связь элементов TRIVERTEX, на которые указывает pVertex .

При рисовании прямоугольников pMesh указывает на массив GRADIENT_RECT структур, каждая из которых задает два элемента TRIVERTEX, определяющих прямоугольник. Элементы TRIVERTEX могут представлять любую пару вершин прямоугольника, противопоставленную по диагонали. Прямоугольный рисунок является эксклюзивным в нижнем правом углу. Как TRIVERTEX, так и GRADIENT_RECT определены в документации по Windows SDK.

При рисовании треугольников pMesh указывает на массив GRADIENT_TRIANGLE структур, каждая из которых задает три элемента TRIVERTEX, определяющих треугольник. Рисунок треугольника является эксклюзивным в нижнем правом углу. GRADIENT_TRIANGLE определяется в документации по Windows SDK.

[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 никогда не вызывает эту функцию для поверхностей с поддонами.

Драйвер перехватывает DrvGradientFill , устанавливая флаг HOOK_GRADIENTFILL при вызове EngAssociateSurface или EngModifySurface. Если драйвер подключил DrvGradientFill и вызывается для выполнения операции, которая не поддерживается, драйвер должен иметь GDI для обработки операции путем отката данных в вызове EngGradientFill.

GDI не вызывает DrvGradientFill для поверхностей назначения 8bpp.

Формулы для вычисления значения цвета в каждом пикселе примитива зависят от ulMode следующим образом:

Общая погрешность, накапливаемая по всем трем цветовым каналам, не должна превышать восемь (8). Дополнительные сведения о допустимой ошибке см. в разделе Специальные эффекты в драйверах дисплея.

Драйвер должен игнорировать альфа-значение вершин, оставляя альфа-канал без изменений для поверхностей, поддерживающих альфа-смешение.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть winddi.h (включая Winddi.h)

См. также раздел

EngAssociateSurface

EngGradientFill