Microsoft DirectX 8.0 (C++) |
Microsoft® DirectInput® オブジェクトを作成した後は、IDirectInputDevice8 インターフェイスへのポインタを取得する必要がある。このインターフェイスは、ジョイスティック関連タスクの大半で使用される。Joystick サンプルでは、コールバック関数 EnumJoysticksCallback でこのポイントを取得する。この関数は、ジョイスティックを列挙するたびに呼び出される。
次のサンプル コードは、このコールバック関数の最初の部分である。
BOOL CALLBACK EnumJoysticksCallback(const DIDEVICEINSTANCE* pdidInstance, VOID* pContext) { HRESULT hr; // 列挙されたジョイスティックへのインターフェイスを取得する。 hr = g_pDI->CreateDevice(pdidInstance->guidInstance, &g_pJoystick, NULL); if(FAILED(hr)) return DIENUM_CONTINUE; return DIENUM_STOP;
EnumJoysticksCallback コールバック関数のパラメータを次に示す。
コールバック関数の最初のタスクは、デバイスを作成することである。IDirectInput8::CreateDevice メソッドは、3 つのパラメータを取る。
第 1 パラメータは、デバイスのインスタンスのグローバル ユニーク識別子 (GUID) に対する参照値である。この場合、GUID は DirectInput がデバイスを列挙したときに与える DIDEVICEINSTANCE 構造体から取られる。
第 2 パラメータは、呼び出しが成功した場合に、有効なインターフェイス ポインタで初期化される変数のアドレスである。
第 3 パラメータは、COM 集成体で使用する制御オブジェクトの IUnknown インターフェイスのアドレスである。Joystick サンプルは集成体を使用しないため、このパラメータの値には NULL を設定する。
デバイス インターフェイスを作成できない場合は、コールバック関数から DIENUM_CONTINUE が返されることに注意する。このフラグは、列挙対象のデバイスが存在する限り、列挙を続行することを DirectInput に指示する。
ジョイスティック デバイスを作成したら、「ステップ 3 : ジョイスティックのデータ形式の設定」に進む。