エフェクト オブジェクトの列挙
作成したすべてのエフェクトを確認または操作する必要がある場合は、IDirectInputDevice8::EnumCreatedEffectObjects メソッドを使用できます。このメソッドには現在フラグが定義されていないため、列挙を特定の種類のエフェクトに制限することはできず、すべてのエフェクトが列挙されます。
注 このメソッドは、デバイスによってサポートされるエフェクトではなく、作成されたエフェクトを列挙します。両者の区別の詳細については、「エフェクトの列挙」を参照してください。
他の DirectInput の列挙と同様に、IDirectInputDevice8::EnumCreatedEffectObjects メソッドにもコールバック関数が必要です。この標準コールバックについては、プレースホルダー名 DIEnumCreatedEffectObjectsCallback で説明されていますが、別の名前を使用することもできます。この関数は、列挙されたエフェクトごとに呼び出されます。関数内では任意の処理を実行できます。ただし、列挙の実行中に新しいエフェクトを作成することは安全ではありません。
次の例にこのコールバック関数の骨組みを示します。このコールバックの pvRef パラメーターは任意の 32 ビット値にできます。この場合は、列挙を実行する IDirectInputDevice8 インターフェイス インターフェイスへのポインターです。
HRESULT hr;
BOOL CALLBACK DIEnumCreatedEffectObjectsCallback(
LPDIRECTINPUTEFFECT peff, LPVOID pvRef);
{
LPDIRECTINPUTDEVICE pdid = (IDirectInputDevice*)pvRef;
// Pointer to calling device
DIEFFECT diEffect; // Params for created effect
diEffect.dwSize = sizeof(DIEffectInfo);
peff->GetParameters(&diEffect, DIEP_ALLPARAMS);
// Check or set parameters, or do anything else.
.
.
.
} // End of callback
次に、DirectInputDevice のポインター lpdid を渡して列挙を開始する呼び出しを示します。
hr = lpdid->EnumCreatedEffectObjects(
&DIEnumCreatedEffectObjectsCallback,
&lpdid, 0);