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