Microsoft DirectX 8.0 (C++)

エフェクト オブジェクトの列挙

プログラムに生成したすべてのエフェクトの実験や操作が必要になったときは、IDirectInputDevice8::EnumCreatedEffectObjects メソッドを利用することができる。現在のところ、このメソッドにはフラグがまったく定義されていないので、特定の種類のエフェクトに列挙を絞り込むことはできない。すべてのエフェクトが列挙されてしまう。

 :  このメソッドは生成されるエフェクトは列挙するが、デバイスによってサポートされるエフェクトは列挙しない。この 2 つのエフェクトの区別について詳細は、「エフェクトの列挙」を参照すること。

Microsoft® DirectInput® のほかの列挙と同様に、EnumCreatedEffectObjects メソッドにはコールバック関数が必要である。この標準コールバック関数は、ドキュメントではプレースホルダ名 DIEnumCreatedEffectObjectsCallback で表されているが、異なる名前を付けてもよい。この関数は列挙されたエフェクトそれぞれについて呼び出される。この関数内では、どんな処理でも実行することができる。しかし、列挙の実行中は新しいエフェクトを生成しない方が安全である。

次に挙げるのは、コールバック関数の骨格を示すコード例である。コールバック関数の pvRef パラメータは、32 ビットの任意の値を取ることができる。この場合、このパラメータは IDirectInputDevice8 インターフェイスへのポインタである。

HRESULT  hr;
 
BOOL CALLBACK DIEnumCreatedEffectObjectsCallback(
                             LPDIRECTINPUTEFFECT peff, LPVOID pvRef);
{
    LPDIRECTINPUTDEVICE pdid = (IDirectInputDevice*)pvRef;  
                                        // 呼び出しデバイスへのポインタ。
    DIEFFECT            diEffect;       // 生成されたエフェクト用のパラメータ。
    
    diEffect.dwSize = sizeof(DIEFFECTINFO);
    peff->GetParameters(&diEffect, DIEP_ALLPARAMS);
    // パラメータのチェックまたは設定、あるいはその他の処理。
    .
    .
    .
}   // コールバックの終了。
 

この呼び出しは、コールバックを始動し、DirectInputDevice ポインタ lpdid に渡す。

hr = lpdid->EnumCreatedEffectObjects(           
         &DIEnumCreatedEffectObjectsCallback,
         &lpdid, 0);