다음을 통해 공유


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 플래그가 있어야 합니다.

반환 값

반환 값은 다음 값 중 하나일 수 있습니다.

반환 코드 설명
SPS_ACCEPT_EXCLUDE
사용되지 않습니다. GDI는 드라이버의 포인터를 사용하지 않도록 설정하고 드라이버가 이 값을 반환하는 경우 소프트웨어 시뮬레이션에 되돌리기.
SPS_ACCEPT_NOEXCLUDE
드라이버는 셰이프를 허용합니다. 셰이프는 하드웨어에서 지원되며 GDI는 포인터를 덮어쓰는 다른 드로잉에 대해 걱정하지 않습니다.
SPS_DECLINE
드라이버는 셰이프를 지원하지 않으므로 GDI는 셰이프를 시뮬레이션해야 합니다.
SPS_ERROR
드라이버는 일반적으로 이 셰이프를 지원하지만 비정상적인 이유로 실패했습니다.

설명

DrvSetPointerShape 는 디스플레이 드라이버에 대한 선택 사항입니다. 그러나 이 함수를 구현하는 경우 DrvMovePointer 도 구현해야 합니다.

psoMaskpsoColor 지점이 고유한 포인터에 대해 고유한 SURFOBJ 구조체의 iUniq 멤버입니다. 드라이버는 이러한 구조체의 고유한 dhsurf 핸들과 함께 이 정보를 커서 캐싱을 위한 캐시 키로 사용할 수 있습니다.

fl 매개 변수에서 SPS_ALPHA 설정되면 psoMaskNULL이고 psoColor는 32bpp BGRA 표면을 가리킵니다. 픽셀당 알파 값은 바탕 화면 픽셀이 아래에 있는 해당 포인터 픽셀의 불투명도를 나타냅니다. 원본 알파 형식은 미리 곱합니다. 즉, 원본 표면의 각 색 채널은 이미 해당 알파 값으로 미리 곱하기 때문에 혼합 시 곱하기 연산이 제거됩니다.

기본 알파 커서는 대체로 흑백이며 알파 값의 범위가 큽니다. 그러나 애플리케이션에서 임의의 커서 자체를 지정할 수 있으므로 색 제한이 없습니다. 일반적인 알파 포인터 크기는 알파가 없는 일반적인 포인터보다 크기가 약 8픽셀 더 큽니다. 이는 결과 포인터 비트맵 셰이프를 확장하는 흐림 필터에 의해 수행되는 그림자 효과를 수용합니다. 포인터의 대부분은 64x64 픽셀 비트맵 이하가 됩니다.

드라이버는 DrvEnablePDEV에서 반환된 DEVINFO 구조체의 flGraphicsCaps2 멤버에서 GCAPS2_ALPHACURSOR 플래그를 설정하여 픽셀별 알파 값으로 포인터를 처리하는 기능을 나타냅니다.

요구 사항

요구 사항
대상 플랫폼 데스크톱
머리글 winddi.h(Winddi.h 포함)

추가 정보

DrvEnablePDEV

DrvMovePointer

SURFOBJ

XLATEOBJ