Platform SDK: DirectX |
ここでは、C++ でのアプリケーション開発について説明する。DirectX for Visual Basic は、生成されるエフェクトの列挙をサポートしていない。
プログラムに生成したすべてのエフェクトの実験や操作が必要になったときは、IDirectInputDevice7::EnumCreatedEffectObjects メソッドを利用することができる。現在のところ、このメソッドにはフラグがまったく定義されていないので、特定の種類のエフェクトに列挙を絞り込むことはできない。すべてのエフェクトが列挙されてしまう。
注 : このメソッドは生成されるエフェクトは列挙するが、デバイスによってサポートされるエフェクトは列挙しない。この 2 つのエフェクトの区別について詳細は、「エフェクトの列挙」を参照すること。
DirectInput のほかの列挙と同様に、EnumCreatedEffectObjects メソッドにはコールバック関数が必要である。この標準コールバック関数は、ドキュメントではプレースホルダ名 DIEnumCreatedEffectObjectsCallback で表されているが、異なる名前を付けてもよい。この関数は列挙されたエフェクトそれぞれについて呼び出される。この関数内では、どんな処理でも実行することができる。しかし、列挙の実行中は新しいエフェクトを生成しない方が安全である。
次に挙げるのは、コールバック関数のコーディングの 1 例である。ここでは、EnumCreatedEffectObjects メソッドへの呼び出しが行われている。コールバック関数の pvRef パラメータは、32 ビットの任意の値を取ることができる。この場合、このパラメータはデバイス インターフェイスへのポインタである。
HRESULT hr; // LPDIRECTINPUTDEVICE lpdid; // 初期化済み。 BOOL CALLBACK DIEnumCreatedEffectObjectsCallback( LPDIRECTINPUTEFFECT peff, LPVOID pvRef); { LPDIRECTINPUTDEVICE pdid = pvRef; // 呼び出しデバイスへのポインタ。 DIEFFECT diEffect; // 生成されたエフェクト用のパラメータ。 diEffect.dwSize = sizeof(DIEFFECTINFO); peff->GetParameters(&diEffect, DIEP_ALLPARAMS); // パラメータのチェックまたは設定、あるいはその他の処理。 . . . } // コールバックの終了。 // コールバックの始動。 hr = lpdid->EnumCreatedEffectObjects(&EnumCreatedEffectObjectsCallback, &lpdid, 0);