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
AND-XOR 마스크를 정의하는 SURFOBJ 구조체에 대한 포인터입니다. AND-XOR 마스크는 단색 포인터 그리기에 설명되어 있습니다. 이 비트맵의 차원은 포인터의 크기를 결정합니다. 포인터 크기에 대한 암시적 제약 조건은 없지만 최적의 포인터 크기는 32 x 32, 48 x 48 및 64 x 64 픽셀입니다. 이 매개 변수가 NULL이면 포인터가 투명합니다.
[in] psoColor
색 포인터의 색을 정의하는 SURFOBJ 구조체에 대한 포인터입니다. 이 매개 변수가 NULL이면 포인터가 단색입니다. 포인터 비트맵의 너비는 psoMask 와 같고 높이는 절반입니다.
[in] pxlo
psoColor에서 색을 정의하는 XLATEOBJ 구조체에 대한 포인터입니다.
[in] xHot
왼쪽 위 픽셀을 기준으로 포인터 핫스폿의 x 위치를 지정합니다. 핫스폿으로 표시된 픽셀은 새 포인터 위치에 배치되어야 합니다.
[in] yHot
왼쪽 위 픽셀을 기준으로 포인터 핫 스폿의 y 위치를 지정합니다. 핫스폿으로 표시된 픽셀은 새 포인터 위치에 배치되어야 합니다.
[in] x
새 포인터 위치의 x 좌표를 지정합니다.
[in] y
새 포인터 위치의 y 좌표를 지정합니다.
[in] prcl
드라이버가 포인터의 표시되는 부분에 대해 꽉 바운드를 지정하는 사각형을 작성해야 하는 위치를 나타내는 RECTL 구조를 지정합니다.
[in] fl
확장 가능한 플래그 집합을 지정합니다. 드라이버가 이해하지 못하는 플래그가 설정된 경우 호출을 거부해야 합니다. 이 매개 변수는 다음 미리 정의된 값 중 하나 이상과 하나 이상의 드라이버 정의 값일 수 있습니다.
플래그 | 의미 |
---|---|
SPS_ALPHA | 포인터에는 픽셀당 알파 값이 있습니다. |
SPS_ANIMATESTART | 드라이버는 애니메이션 포인터 효과를 구성하는 비슷한 크기의 포인터 셰이프를 받을 수 있도록 준비해야 합니다. |
SPS_ANIMATEUPDATE | 드라이버는 애니메이션 계열에서 다음 포인터 셰이프를 그려야 합니다. |
SPS_ASYNCCHANGE | 이 플래그는 사용되지 않습니다. 레거시 드라이버의 경우 드라이버는 디바이스에서 다른 그리기가 진행되는 동안 하드웨어에서 포인터 셰이프를 변경할 수 있는 경우에만 변경 내용을 수락해야 합니다. GDI는 이제 사용되지 않는 GCAPS_ASYNCCHANGE 플래그가 DEVINFO 구조체의 flGraphicsCaps 멤버에 설정된 경우에만 이 옵션을 사용합니다. |
SPS_CHANGE | 드라이버가 포인터 셰이프를 변경하도록 요청됩니다. |
SPS_FREQMASK | 드라이버가 마우스 추적을 렌더링하도록 요청되어 fl & SPS_FREQMASK 식 에 표시된 대로 이미지를 밀리초당 여러 번 업데이트합니다. 마우스 추적을 렌더링할 수 있는 드라이버에는 deVINFO 구조체의 flGraphicsCaps2 멤버에 설정된 GCAPS2_MOUSETRAILS 플래그가 있어야 합니다. |
SPS_LENGTHMASK | 드라이버가 fl & SPS_LENGTHMASK 식으로 표시된 길이의 마우스 흔적을 렌더링하도록 요청됩니다. (길이 N의 마우스 흔적은 N + 1 커서 이미지로 구성됩니다.) 마우스 추적을 렌더링할 수 있는 드라이버에는 DEVINFO 구조체의 flGraphicsCaps2 멤버에 설정된 GCAPS2_MOUSETRAILS 플래그가 있어야 합니다. |
반환 값
반환 값은 다음 값 중 하나일 수 있습니다.
반환 코드 | 설명 |
---|---|
|
사용되지 않습니다. GDI는 드라이버의 포인터를 사용하지 않도록 설정하고 드라이버가 이 값을 반환하는 경우 소프트웨어 시뮬레이션에 되돌리기. |
|
드라이버는 셰이프를 허용합니다. 셰이프는 하드웨어에서 지원되며 GDI는 포인터를 덮어쓰는 다른 드로잉에 대해 걱정하지 않습니다. |
|
드라이버는 셰이프를 지원하지 않으므로 GDI는 셰이프를 시뮬레이션해야 합니다. |
|
드라이버는 일반적으로 이 셰이프를 지원하지만 비정상적인 이유로 실패했습니다. |
설명
DrvSetPointerShape 는 디스플레이 드라이버에 대한 선택 사항입니다. 그러나 이 함수를 구현하는 경우 DrvMovePointer 도 구현해야 합니다.
psoMask 및 psoColor 지점이 고유한 포인터에 대해 고유한 SURFOBJ 구조체의 iUniq 멤버입니다. 드라이버는 이러한 구조체의 고유한 dhsurf 핸들과 함께 이 정보를 커서 캐싱을 위한 캐시 키로 사용할 수 있습니다.
fl 매개 변수에서 SPS_ALPHA 설정되면 psoMask는 NULL이고 psoColor는 32bpp BGRA 표면을 가리킵니다. 픽셀당 알파 값은 바탕 화면 픽셀이 아래에 있는 해당 포인터 픽셀의 불투명도를 나타냅니다. 원본 알파 형식은 미리 곱합니다. 즉, 원본 표면의 각 색 채널은 이미 해당 알파 값으로 미리 곱하기 때문에 혼합 시 곱하기 연산이 제거됩니다.
기본 알파 커서는 대체로 흑백이며 알파 값의 범위가 큽니다. 그러나 애플리케이션에서 임의의 커서 자체를 지정할 수 있으므로 색 제한이 없습니다. 일반적인 알파 포인터 크기는 알파가 없는 일반적인 포인터보다 크기가 약 8픽셀 더 큽니다. 이는 결과 포인터 비트맵 셰이프를 확장하는 흐림 필터에 의해 수행되는 그림자 효과를 수용합니다. 포인터의 대부분은 64x64 픽셀 비트맵 이하가 됩니다.
드라이버는 DrvEnablePDEV에서 반환된 DEVINFO 구조체의 flGraphicsCaps2 멤버에서 GCAPS2_ALPHACURSOR 플래그를 설정하여 픽셀별 알파 값으로 포인터를 처리하는 기능을 나타냅니다.
요구 사항
요구 사항 | 값 |
---|---|
대상 플랫폼 | 데스크톱 |
머리글 | winddi.h(Winddi.h 포함) |