Microsoft DirectX 8.0 (Visual Basic)

ステップ 2 : ジョイスティックの能力の取得

デバイス上のボタン、軸、および視点コントローラについての情報を取得するには、DirectInputDevice8.GetCapabilities を呼び出すだけでよい。

Dim joyCaps As DIDEVCAPS
diDev.GetCapabilities joyCaps

Joystick サンプルが知る必要があるのは、デバイス上のボタンと視点コントローラの数のみである。DIDEVCAPS 型は、デバイス上の軸の数も報告するが、軸の状態については一切情報を公開しない。この情報を知るために、サンプルは独自の IdentifyAxes プロシージャを呼び出す。まず変数を宣言し、使用可能な軸の存在または不在を示すブール値を保持する配列を初期化する。

Sub IdentifyAxes(diDev As DirectInputDevice8)

    Dim didoEnum As DirectInputEnumDeviceObjects
    Dim dido As DirectInputDeviceObjectInstance
    Dim i As Integer
    
    For i = 1 To 8
        AxisPresent(i) = False
    Next
    

プロシージャは、デバイスのデバイス オブジェクトの列挙に進む。DIDFT_AXIS 値は、軸の列挙を制限する。

    Set didoEnum = diDev.GetDeviceObjectsEnum(DIDFT_AXIS)

DirectInputDevice8.SetCommonDataFormat の呼び出しで以前に設定されたデータ形式の中で、そのオフセットごとに DirectInputDeviceObjectInstance を問い合わせる。このオフセットにより、軸の従来の役割やタイプが識別される。たとえば、GUID_RzAxis は、メイン スティックのひねり動作に対応することがわかる。ただし、デバイス ドライバは、軸に対して自由に指示を割り当てることができる。ユーザーがアプリケーション内で軸とアクションの対応を変更できるようにしておくのは良いアイデアである。

    Dim sGuid as String
    For i = 1 To didoEnum.GetCount
        Set dido = didoEnum.GetItem(i)
        sGuid = didoEnum.GetItem(i)

        Select Case sGuid
            Case "GUID_Xaxis"
                AxisPresent(1) = True
            Case "GUID_Yaxis"
                AxisPresent(2) = True
' 以下同様。
.
.
.
        End Select
    Next
End Sub

次に、アプリケーションは、以前に作成されたイベント ハンドルをデバイスに渡す。これにより、入力イベントが発生すると、通知はフォームに送信される。

Call diDev.SetEventNotification(EventHandle)

次は、「ステップ 3 : ジョイスティックのプロパティの設定」でジョイスティックのプロパティを設定する。