Microsoft DirectX 8.0

IDirectDraw3 インターフェイス

注 :  このインターフェイスの使用は避けること。新しいアプリケーションで使用してはならない。

IDirectDraw3 インターフェイスは、IDirectDrawFactory::CreateDirectDraw メソッドを通じて DirectDraw オブジェクトを作成したアプリケーションから利用できる。このメソッドは、IDirectDraw インターフェイスへのポインタのアドレスを取得する。アプリケーションでは、これを使って IDirectDraw3 インターフェイスを照会することができる。

IDirectDraw3 インターフェイスは、IDirectDraw3::GetSurfaceFromDC メソッドを追加し、IDirectDraw3::CreateSurface メソッドで異なった動作を提供することにより、IDirectDraw インターフェイスと IDirectDraw2 インターフェイスを拡張したものである。

vtable 順のメソッド

IUnknown メソッド説明
QueryInterface サポートされているインターフェイスへのポインタを取得する。
AddRef 参照カウントをインクリメントする。
Release 参照カウントをデクリメントする。
IDirectDraw3 メソッド説明
CreateSurface DirectDraw オブジェクトから DirectDrawSurface オブジェクトを作成する。
GetSurfaceFromDC デバイス コンテキストのハンドルから IDirectDrawSurface インターフェイスへのポインタを取得する。

IDirectDraw3::CreateSurface

IDirectDraw3 インターフェイス

DirectDraw オブジェクトから DirectDrawSurface オブジェクトを作成する。

構文

STDMETHOD CreateSurface(
    LPDDSURFACEDESC lpDDSurfaceDesc,
    LPDIRECTDRAWSURFACE FAR *lplpDDSurface,
    IUnknown FAR *pUnkOuter
) PURE;

パラメータ

lpDDSurfaceDesc
[in] 要求するサーフェスを記述する DDSURFACEDESC 構造体へのポインタ。このメソッドを呼び出す前に、使用しない DDSURFACEDESC メンバすべてを 0 に設定しなければならない。DDSCAPS 構造体は DDSURFACEDESC のメンバである。
lplpDDSurface
[out] 有効な DirectDrawSurface ポインタで初期化するポインタのアドレス (呼び出しが成功した場合)。
pUnkOuter
[in] 内側のオブジェクトの IUnknown インターフェイスと集成される外側のオブジェクトの IUnknown インターフェイスへのポインタ。

戻り値

成功した場合は、DD_OK を返す。それ以外の場合は、次のいずれかのエラー値を返す。

DDERR_INCOMPATIBLEPRIMARY プライマリ サーフェスの作成要求が既存のプライマリ サーフェスと一致していない。
DDERR_INVALIDCAPS コールバック関数に渡された 1 つ以上の能力ビットが不正である。
DDERR_INVALIDOBJECT DirectDraw が無効な DirectDraw オブジェクトへのポインタを受け取った。
DDERR_INVALIDPARAMSメソッドに渡された 1 つ以上のパラメータが不正である。
DDERR_INVALIDPIXELFORMAT 指定されたピクセル フォーマットが無効である。
DDERR_NOALPHAHW アルファ アクセラレーション ハードウェアが存在しないか、利用できないため、要求された処理が失敗した。
DDERR_NOCOOPERATIVELEVELSET サーフェスの作成前に IDirectDraw2::SetCooperativeLevel メソッドが呼び出されなかった。
DDERR_NODIRECTDRAWHW ハードウェア専用 DirectDraw オブジェクトを作成できない。ドライバはハードウェアをサポートしない。
DDERR_NOEMULATION ソフトウェア エミュレーションが利用できない。
DDERR_NOEXCLUSIVEMODE アプリケーションに対して排他モードが要求されたが、アプリケーションに排他モードがない。
DDERR_NOFLIPHW 表示されるサーフェスをフリッピングできない。
DDERR_NOMIPMAPHW ミップマップ テクスチャをマッピングするハードウェアが存在しないか、利用できないため、処理を実行できない。
DDERR_NOOVERLAYHW オーバーレイ ハードウェアが存在しないか、利用できないため、処理を実行できない。
DDERR_NOZBUFFERHW Z バッファに対するハードウェア サポートがないため、ディスプレイ メモリでの Z バッファ作成、あるいは Z バッファを使用したブリットが実行できない。
DDERR_OUTOFMEMORY DirectDraw が利用できるメモリが足りないため、処理を実行できない。
DDERR_OUTOFVIDEOMEMORY DirectDraw が利用できるディスプレイ メモリが足りないため、処理を実行できない。
DDERR_PRIMARYSURFACEALREADYEXISTS アプリケーションは既にプライマリ サーフェスを作成している。
DDERR_UNSUPPORTEDMODE 処理がサポートされていない。

注意

pUnkOuter パラメータに NULL を渡すと、lplpDDSurface パラメータに DirectDraw サーフェスのアドレスが返される。また、内側のインターフェイスと集成する外側のインターフェイスへのポインタを渡すと、lplpDDSurface パラメータに対応する IUnknown ポインタが返される。

現在の DirectDrawEx は、DDSCAPS 構造体の dwcaps メンバに対応する DDSCAPS_DATAEXCHANGE フラグも提供する。このフラグは、Ddrawex.h に DDSCAPS_SYSTEMMEMORY と DDSCAPS_VIDEOMEMORY の組み合わせとして定義されている。DDSCAPS_DATAEXCHANGE フラグを使ってサーフェスを作成した場合、十分なビデオ メモリが利用できないと、サーフェスが自動的にビデオ メモリへ移される。それ以外の場合には、システム メモリ サーフェスが作成される。また、このフラグを DDSCAPS_OWNDC フラグと共に設定すると、アプリケーションから IDirectDrawSurface::GetDC メソッドを呼び出すことにより、サーフェスのロックを保持せずに、デバイス コンテキストを不要になるまでロックできる。

このメソッドは、IDirectDraw::CreateSurface メソッドと IDirectDraw2::CreateSurface メソッドを呼び出す。

IDirectDraw3::GetSurfaceFromDC

IDirectDraw3 インターフェイス

デバイス コンテキストのハンドルから IDirectDrawSurface インターフェイスへのポインタを取得する。

構文

STDMETHOD GetSurfaceFromDC(
  HDC hdc,
  IDirectDrawSurface **ppSurface
  ) PURE;

パラメータ

hdc
[in] デバイス コンテキスト (DC) のハンドル。
ppSurface
[out] IDirectDrawSurface インターフェイスへのポインタのアドレス。

戻り値

成功した場合は、S_OK を返す。それ以外の場合は、次のいずれかの値を返す。

E_POINTER IDirectDrawSurface へのポインタが無効。
DDERR_NOTFOUND 要求された項目が見つからない。