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 포함) |