Platform SDK: DirectX

ステップ 2 : DirectInput ジョイスティック デバイスの作成

[Visual Basic]

ここでは、C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectInput Visual Basic チュートリアル」を参照すること。

[C++]

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 に指示する。

次項 : ステップ 3 : ジョイスティック データ形式の設定