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

如果介面是裝置管理的,則介面的句柄。 否則,這個成員為零。

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 會設定為零。 這個值會與 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 類型,這是下列其中一項:

類型 定義
STYPE_BITMAP 表面是位圖。
STYPE_DEVBITMAP 表面是裝置格式點陣圖。
STYPE_DEVICE 表面是由裝置所管理。

fjBitmap

如果介面的類型為 STYPE_BITMAP,而且是標準的未壓縮格式位圖,則可以設定下列旗標。 否則,應該忽略這個成員。

意義
BMF_DONTCACHE 驅動程式不應該快取位圖,因為它是 GDI 所建立的暫時性位圖,驅動程式永遠不會再看到該位圖。 如果設定此旗標,此結構的 iUniq 成員將會設定為 0。
BMF_KMSECTION 僅供 GDI 使用,驅動程式應該忽略。
BMF_NOTSYSMEM 點陣圖不在系統記憶體中。 EngModifySurface 會在將點陣圖移至視訊記憶體時設定此旗標。
BMF_NOZEROINIT 位圖未初始化為零。
BMF_TOPDOWN 第一個掃描行代表位圖 頂端
BMF_WINDOW_BLT GDI 會將此旗標設定為通知驅動程式視窗從一個畫面位置移到另一個畫面位置。

備註

當驅動程式需要特定表面的相關信息時,驅動程式必須存取 SURFOBJ。 此結構可讓您快速存取表面的屬性。

當 SURFOBJ 結構代表 GDI 位圖時,驅動程式必須能夠判斷位圖的格式,並找出位圖位。

當 SURFOBJ 結構代表裝置表面時,驅動程式必須能夠找到表面的裝置控點。

如需支援 JPEG 和 PNG 壓縮影像的詳細資訊,請參閱 DEVINFO

規格需求

需求
標頭 winddi.h (包含Winddi.h)