Platform SDK: DirectX |
ここでは、Visual Basic でのアプリケーション開発について説明する。C++ については、「DirectInput C/C++ チュートリアル」を参照すること。
システム キーボードやシステム マウスがあるということと同じ意味での、システム ジョイスティックというものはないので、ジョイスティックの DirectInputDevice オブジェクトを作成するには、まずインスタンス GUID (グローバル ユニーク識別子) を取得する必要がある。通常、これは利用可能なジョイスティックを列挙し、ユーザーに選択肢を提示して、選択されたデバイスの情報を取得することにより実現される。
次の関数は、DirectInput を初期化し、アタッチされているジョイスティックを列挙する。
Dim dx As New DirectX7 Dim di As DirectInput Dim diDev As DirectInputDevice Dim diDevEnum As DirectInputEnumDevices Sub InitDirectInput() On Error GoTo Error_Out Set di = dx.DirectInputCreate() Set diDevEnum = di.GetDIEnumDevices( _ DIDEVTYPE_JOYSTICK, DIEDFL_ATTACHEDONLY) If diDevEnum.GetCount = 0 Then MsgBox "No joystick attached." Unload Me End If 'アタッチされているジョイスティックをリストボックスに追加する。 Dim i As Integer For i = 1 To diDevEnum.GetCount Call lstJoySticks.AddItem( _ diDevEnum.GetItem(i).GetInstanceName) Next ' イベント ハンドルを取得して、デバイスに関連付ける。 EventHandle = dx.CreateEvent(Me) Exit Sub Error_Out: MsgBox "Error initializing DirectInput." Unload Me End Sub
ユーザーがリストからジョイスティックを選択すると、そのデバイスが作成され、lstJoySticks_Click プロシージャ内で初期化される。
Set diDev = di.CreateDevice(diDevEnum.GetItem( _ lstJoySticks.ListIndex + 1).GetGuidInstance) diDev.SetCommonDataFormat DIFORMAT_JOYSTICK diDev.SetCooperativeLevel Me.hWnd, _ DISCL_FOREGROUND Or DISCL_NONEXCLUSIVE
DirectInput.CreateDevice の呼び出しでは、列挙から取得された DirectInputDeviceInstance オブジェクトの GUID をパラメータとして受け取る。DirectX for Visual Basic におけるすべての列挙コレクションと同様に、デバイスの列挙は 1 から開始される。したがって、インデックスは、リスト ボックスで選択された項目のインデックスよりも 1 つ大きくなる。また、リスト ボックスはソートしない。
デバイス上のオブジェクトを列挙しようとしたり、プロパティを操作しようとしたりする前に、データ形式を設定する必要がある。