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


Функция EngSetPointerShape (winddi.h)

Функция EngSetPointerShape задает фигуру указателя для вызывающего драйвера.

Синтаксис

ENGAPI ULONG EngSetPointerShape(
  [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. Указатель имеет ту же ширину и половину высоты маски, на которую указывает psoMask . Нет неявных ограничений на размеры указателей, но оптимальные размеры указателей: 32 x 32, 48 x 48 и 64 x 64 пикселей. Если этот параметр имеет значение NULL, указатель будет прозрачным.

[in] psoColor

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

[in] pxlo

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

[in] xHot

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

[in] yHot

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

[in] x

Задает координаты x нового положения указателя.

[in] y

Задает координаты y для новой позиции указателя.

[in] prcl

Указатель на структуру RECTL . Если значение не равно NULL, драйвер предоставил прямоугольник, ограничивающий все пиксели, затронутые указателем на дисплее. GDI позволяет избежать рисования на этом прямоугольнике без предварительного перемещения указателя в сторону.

[in] fl

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

Flag Значение
SPS_ANIMATESTART GDI должен быть готов к получению ряда похожих по размеру фигур указателей, которые будут содержать эффект анимированного указателя.
SPS_ANIMATEUPDATE GDI должен нарисовать следующую фигуру указателя в анимированном сериале.
SPS_CHANGE GDI запрашивается для изменения фигуры указателя.

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

EngSetPointerShape возвращает одно из следующих значений:

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

Комментарии

Драйвер может вызвать EngSetPointerShape , чтобы GDI управлял программным курсором.

Существует две части монохромного растрового изображения, на которые указывает psoMask . Первая часть определяет маску AND для указателя, а вторая — маску XOR. Вместе эти маски предоставляют два бита информации для каждого пикселя изображения указателя. Следующая таблица истинности определяет, что GDI рисует на экране для различных значений в масках AND и XOR:

И значение Значение XOR Результирующий пиксель
0 0 Белый
0 1 Черный
1 0 Без изменений в пикселях
1 1 Цвет пикселей инвертирован
 

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

Требования

   
Минимальная версия клиента Доступно в Windows 2000 и более поздних версиях операционных систем Windows.
Целевая платформа Универсальное
Верхняя часть winddi.h (включая Winddi.h)
Библиотека Win32k.lib
DLL Win32k.sys

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

DrvSetPointerShape

EngMovePointer

SURFOBJ

XLATEOBJ