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


Функция 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

Указатель на структуру SURFOBJ, которая определяет маску AND-XOR. (Маска AND-XOR описана в разделе Рисование монохромных указателей.) Размеры этого растрового изображения определяют размер указателя. Нет неявных ограничений на размеры указателей, но оптимальные размеры указателя — 32 x 32, 48 x 48 и 64 x 64 пикселя. Если этот параметр имеет значение NULL, указатель будет прозрачным.

[in] psoColor

Указатель на структуру SURFOBJ, которая определяет цвета для цветового указателя. Если этот параметр имеет значение NULL, указатель будет монохромным. Растровое изображение указателя имеет ту же ширину, что и psoMask , и половину высоты.

[in] pxlo

Указатель на структуру XLATEOBJ , которая определяет цвета в psoColor.

[in] xHot

Укажите положение x горячей точки указателя относительно его верхнего левого пикселя. Пиксель, указанный горячей точкой, должен располагаться в новой позиции указателя.

[in] yHot

Укажите положение Y горячей точки указателя относительно его верхнего левого пикселя. Пиксель, указанный горячей точкой, должен располагаться в новой позиции указателя.

[in] x

Укажите координату X нового положения указателя.

[in] y

Укажите координату Y нового положения указателя.

[in] prcl

Задает структуру RECTL , указывающую расположение, в котором драйвер должен написать прямоугольник, указывающий тесную границу видимой части указателя.

[in] fl

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

Flag Значение
SPS_ALPHA Указатель имеет альфа-значения для каждого пикселя.
SPS_ANIMATESTART Драйвер должен быть готов к получению ряда фигур указателей аналогичного размера, которые будут содержать эффект анимированного указателя.
SPS_ANIMATEUPDATE Драйвер должен нарисовать следующую фигуру указателя в мультсериале.
SPS_ASYNCCHANGE Этот флаг устарел. Для устаревших драйверов драйвер должен принимать изменения только в том случае, если он способен изменять фигуру указателя на оборудовании, пока на устройстве выполняется другое рисование. GDI использует этот параметр, только если флаг GCAPS_ASYNCCHANGE устарел в элементе flGraphicsCaps структуры DEVINFO .
SPS_CHANGE Драйверу будет предложено изменить фигуру указателя.
SPS_FREQMASK Драйверу предлагается отобразить след мыши, обновляя изображение столько раз в миллисекундах, сколько указано в выражении fl & SPS_FREQMASK. Драйвер, способный отрисовывать следы мыши, должен иметь флаг GCAPS2_MOUSETRAILS, установленный в элементе flGraphicsCaps2 структуры DEVINFO .
SPS_LENGTHMASK Драйверу предлагается отобразить след мыши длиной, указанной выражением fl & SPS_LENGTHMASK. (След мыши длиной N состоит из N + 1 изображений курсора.) Драйвер, способный отрисовывать следы мыши, должен иметь флаг GCAPS2_MOUSETRAILS, установленный в элементе flGraphicsCaps2 структуры DEVINFO .

Возвращаемое значение

Возвращаемое значение может быть одним из следующих значений:

Код возврата Описание
SPS_ACCEPT_EXCLUDE
Является устаревшим. GDI отключит указатель драйвера и отменить изменения программного моделирования, если драйвер возвращает это значение.
SPS_ACCEPT_NOEXCLUDE
Драйвер принимает фигуру. Фигура поддерживается в оборудовании, и GDI не беспокоится о перезаписи указателя другими рисунками.
SPS_DECLINE
Драйвер не поддерживает фигуру, поэтому GDI должен имитировать ее.
SPS_ERROR
Драйвер обычно поддерживает эту форму, но не удалось по необычным причинам.

Комментарии

DrvSetPointerShape является необязательным для драйверов отображения. Однако если эта функция реализована, необходимо также реализовать DrvMovePointer .

Элементы iUniq структур SURFOBJ, на которые psoMask и psoColor point являются уникальными для уникальных указателей. Драйвер может использовать эти сведения в сочетании с уникальными дескрипторами dhsurf этих структур в качестве ключей кэша для кэширования курсоров.

Если SPS_ALPHA задано в параметре fl , psoMask имеет значение NULL , а psoColor указывает на поверхность BGRA 32bpp. Альфа-значение для каждого пикселя указывает на непрозрачность соответствующего пикселя указателя с пикселем рабочего стола под ним. Исходный альфа-формат предварительно задан; т. е. каждый из цветовых каналов исходной поверхности уже предварительно изменен соответствующим альфа-значением, что исключает операцию умножения во время смешения.

Альфа-курсоры по умолчанию в основном черно-белые с большим диапазоном альфа-значений; Однако цветового ограничения нет, так как приложения могут сами указывать произвольные курсоры. Типичные размеры альфа-указателей примерно на 8 пикселей больше по размеру, чем обычные указатели без альфа-канала. Это поддерживает эффект тени, который выполняется размытием фильтра, который расширяет результирующий растровый рисунок указателя. Подавляющее большинство указателей будет иметь растровые изображения размером 64 x 64 пикселей или меньше.

Драйвер указывает на возможность обработки указателей с альфа-значениями на пиксель, устанавливая флаг GCAPS2_ALPHACURSOR в элементе flGraphicsCaps2 структуры DEVINFO , возвращаемой DrvEnablePDEV.

Требования

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

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

DrvEnablePDEV

DrvMovePointer

SURFOBJ

XLATEOBJ