Platform SDK: DirectX |
ここでは、C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectInput Visual Basic チュートリアル」を参照すること。
DirectInput オブジェクトを作成すると、アプリケーションは、ジョイスティック関連タスクの大半を実行するのに使う IDirectInputDevice7 インターフェイスへのポインタを取得する必要がある。Space Donuts サンプルでは、この処理は、ジョイスティックが列挙されるたびに呼び出されるコールバック関数 InitJoystickInput で行われている。
以下は、そのコールバック関数の最初の一部である。
BOOL FAR PASCAL InitJoystickInput(LPCDIDEVICEINSTANCE pdinst, LPVOID pvRef) { LPDIRECTINPUT7 pdi = pvRef; LPDIRECTINPUTDEVICE7 pdev; // DirectInput ジョイスティック デバイスを作成する。 if (pdi->lpVtbl->CreateDeviceEx(pdi, &pdinst->guidInstance, IID_IDirectInputDevice7, (void**)&pdev, NULL) != DI_OK) { OutputDebugString("IDirectInput7::CreateDeviceEx FAILED\n"); return DIENUM_CONTINUE; }
InitJoystickInput のコールバック関数のパラメータは、以下のとおりである。
サンプル関数 InitJoystickInput は、DirectInput オブジェクトへのローカル ポインタ pdi を宣言し、このポインタに、コールバック関数に渡す値を割り当てる。また、DirectInput デバイスへのローカル ポインタ pdev も宣言する。このポインタは、デバイスの作成時に初期化される。
コールバック関数の最初のタスクは、デバイスを作成することである。IDirectInput7::CreateDeviceEx メソッドは、4 つのパラメータを取る。
第 1 パラメータは、呼び出し側の DirectInput インターフェイスに対するポインタであり、C++ では不要である。
第 2 パラメータは、デバイスのインスタンスの GUID に対する参照値である。この場合、GUID は DirectInput がデバイスを列挙したときに与える DIDEVICEINSTANCE 構造体から取られる。
第 3 パラメータは、呼び出しが成功した場合に、有効なインターフェイス ポインタで初期化される変数のアドレスである。
第 4 パラメータは、COM 集合化で使用する制御オブジェクトの IUnknown インターフェイスのアドレスである。Space Donuts サンプルでは集合化を使用しないので、パラメータは NULL である。
何らかの理由で、デバイス インターフェイスを作成できない場合は、コールバック関数から DIENUM_CONTINUE が返されることに注意すること。このフラグは、列挙対象のデバイスが存在する限り、列挙を続行することを DirectInput に指示する。