SURFOBJ 構造体 (winddi.h)

SURFOBJ 構造体は、サーフェスのユーザー オブジェクトです。 通常、デバイス ドライバーは、サーフェス オブジェクトが GDI ビットマップまたは デバイス管理サーフェスを表す場合にのみ、サーフェス オブジェクトのメソッドを呼び出します。

構文

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

ビットマップ内のスキャン行を 1 つ下に移動するために必要なバイト数を指定します。 iBitmapFormat がBMF_JPEGまたはBMF_PNGの場合、このメンバーは NULL です

iUniq

指定したサーフェスの現在の状態を指定します。 サーフェスが変更されるたびに、この値がインクリメントされます。 これにより、ドライバーはソース サーフェスをキャッシュできます。

キャッシュしないサーフェスの場合、 iUniq は 0 に設定されます。 この値は、 fjBitmap の BMF_DONTCACHE フラグと組み合わせて使用されます。

iBitmapFormat

このサーフェスに最も近い標準書式を指定します。 iType メンバーがビットマップ (STYPE_BITMAP) を指定する場合、このメンバーはその形式を指定します。 NT ベースのオペレーティング システムでは一連の定義済み形式がサポートされていますが、アプリケーションでは SetDIBitsToDevice を使用してデバイス固有の形式を送信することもできます。 サポートされている定義済みの形式は次のとおりです。

意味
BMF_1BPP 1 ピクセルあたり 1 ビット。
BMF_4BPP ピクセルあたり 4 ビット。
BMF_8BPP ピクセルあたり 8 ビット。
BMF_16BPP 1 ピクセルあたり 16 ビット。
BMF_24BPP 1 ピクセルあたり 24 ビット。
BMF_32BPP 1 ピクセルあたり 32 ビット。
BMF_4RLE ピクセルあたり 4 ビット、実行長でエンコードされます。
BMF_8RLE ピクセルあたり 8 ビット、実行長がエンコードされています。
BMF_JPEG JPEG 圧縮画像。
BMF_PNG PNG 圧縮イメージ。

iType

サーフェスの種類。これは次のいずれかです。

Type 定義
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」を参照してください。

要件

要件
Header winddi.h (Winddi.h を含む)