다음을 통해 공유


SURFOBJ 구조체(winddi.h)

SURFOBJ 구조체는 표면의 사용자 개체입니다. 디바이스 드라이버는 일반적으로 Surface 개체가 GDI 비트맵 또는 디바이스 관리 표면을 나타내는 경우에만 Surface 개체에서 메서드를 호출합니다.

구문

typedef struct _SURFOBJ {
  DHSURF dhsurf;
  HSURF  hsurf;
  DHPDEV private_dhpdev;
  HDEV   private_hdev;
  DHPDEV dhpdev;
  HDEV   hdev;
  SIZEL  sizlBitmap;
  ULONG  cjBits;
  PVOID  pvBits;
  PVOID  pvScan0;
  LONG   lDelta;
  ULONG  iUniq;
  ULONG  iBitmapFormat;
  USHORT iType;
  USHORT fjBitmap;
} SURFOBJ;

멤버

dhsurf

표면이 디바이스 관리인 경우 표면에 대한 핸들입니다. 그렇지 않으면 이 멤버는 0입니다.

hsurf

표면에 대한 핸들입니다.

private_dhpdev

private_hdev

dhpdev

지정된 표면과 연결된 디바이스의 PDEV 를 식별합니다.

hdev

이 디바이스와 연결된 PDEV에 대한 GDI의 논리적 핸들입니다.

sizlBitmap

표면의 너비와 높이를 픽셀 단위로 포함하는 SIZEL 구조를 지정합니다. SIZEL 구조체는 SIZE 구조체와 동일합니다.

cjBits

pvBits가 가리키는 버퍼의 크기를 지정합니다.

pvBits

표면이 표준 형식 비트맵인 경우 이는 표면의 픽셀에 대한 포인터입니다. BMF_JPEG 또는 BMF_PNG 이미지의 경우 JPEG 또는 PNG 형식의 이미지 데이터를 포함하는 버퍼에 대한 포인터입니다. 그렇지 않으면 이 멤버가 NULL입니다.

pvScan0

비트맵의 첫 번째 검사 줄에 대한 포인터입니다. iBitmapFormat이 BMF_JPEG 또는 BMF_PNG 경우 이 멤버는 NULL입니다.

lDelta

비트맵에서 하나의 검색 줄 아래로 이동하는 데 필요한 바이트 수를 지정합니다. iBitmapFormat이 BMF_JPEG 또는 BMF_PNG 경우 이 멤버는 NULL입니다.

iUniq

지정된 표면의 현재 상태를 지정합니다. 표면이 변경될 때마다 이 값이 증가합니다. 이렇게 하면 드라이버가 원본 표면을 캐시할 수 있습니다.

캐시해서는 안 되는 표면의 경우 iUniq 가 0으로 설정됩니다. 이 값은 fjBitmap의 BMF_DONTCACHE 플래그와 함께 사용됩니다.

iBitmapFormat

이 표면과 가장 일치하는 표준 형식을 지정합니다. iType 멤버가 비트맵(STYPE_BITMAP)을 지정하는 경우 이 멤버는 해당 형식을 지정합니다. NT 기반 운영 체제는 미리 정의된 형식 집합을 지원하지만 애플리케이션은 SetDIBitsToDevice를 사용하여 디바이스별 형식을 보낼 수도 있습니다. 지원되는 미리 정의된 형식은 다음과 같습니다.

의미
BMF_1BPP 픽셀당 1비트입니다.
BMF_4BPP 픽셀당 4비트.
BMF_8BPP 픽셀당 8비트.
BMF_16BPP 픽셀당 16비트.
BMF_24BPP 픽셀당 24비트입니다.
BMF_32BPP 픽셀당 32비트입니다.
BMF_4RLE 픽셀당 4비트, 실행 길이 인코딩.
BMF_8RLE 픽셀당 8비트, 실행 길이 인코딩.
BMF_JPEG JPEG 압축 이미지.
BMF_PNG PNG 압축 이미지.

iType

Surface 유형은 다음 중 하나입니다.

Type 정의
STYPE_BITMAP 표면은 비트맵입니다.
STYPE_DEVBITMAP 표면은 디바이스 형식 비트맵입니다.
STYPE_DEVICE 표면은 디바이스에서 관리됩니다.

fjBitmap

표면이 STYPE_BITMAP 형식이고 표준 압축되지 않은 형식 비트맵인 경우 다음 플래그를 설정할 수 있습니다. 그렇지 않으면 이 멤버를 무시해야 합니다.

의미
BMF_DONTCACHE 비트맵은 드라이버가 다시는 볼 수 없으므로 GDI에서 만든 일시적인 비트맵이므로 드라이버에서 캐시해서는 안 됩니다. 이 플래그가 설정되면 이 구조체의 iUniq 멤버가 0으로 설정됩니다.
BMF_KMSECTION GDI에서만 사용되며 드라이버에서 무시해야 합니다.
BMF_NOTSYSMEM 비트맵이 시스템 메모리에 없습니다. EngModifySurface는 비트맵을 비디오 메모리로 이동할 때 이 플래그를 설정합니다.
BMF_NOZEROINIT 비트맵이 0으로 초기화되지 않았습니다.
BMF_TOPDOWN 첫 번째 검사 줄은 비트맵의 위쪽 을 나타냅니다.
BMF_WINDOW_BLT GDI는 이 플래그를 설정하여 한 화면 위치에서 다른 화면 위치로 창 이동을 드라이버에 알립니다.

설명

드라이버에서 특정 표면에 대한 정보가 필요한 경우 드라이버는 SURFOBJ에 액세스해야 합니다. 이 구조를 사용하면 표면의 속성에 빠르게 액세스할 수 있습니다.

SURFOBJ 구조체가 GDI 비트맵을 나타내는 경우 드라이버는 비트맵의 형식을 확인하고 비트맵 비트를 찾을 수 있어야 합니다.

SURFOBJ 구조체가 디바이스 표면을 나타내는 경우 드라이버는 표면에 대한 디바이스 핸들을 찾을 수 있어야 합니다.

JPEG 및 PNG 압축 이미지 지원에 대한 자세한 내용은 DEVINFO를 참조하세요.

요구 사항

요구 사항
헤더 winddi.h(Winddi.h 포함)