Функция 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 . |
Возвращаемое значение
Возвращаемое значение может быть одним из следующих значений:
Код возврата | Описание |
---|---|
|
Является устаревшим. GDI отключит указатель драйвера и отменить изменения программного моделирования, если драйвер возвращает это значение. |
|
Драйвер принимает фигуру. Фигура поддерживается в оборудовании, и GDI не беспокоится о перезаписи указателя другими рисунками. |
|
Драйвер не поддерживает фигуру, поэтому GDI должен имитировать ее. |
|
Драйвер обычно поддерживает эту форму, но не удалось по необычным причинам. |
Комментарии
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) |