Platform SDK: DirectX

デバイス データ形式

デバイスのデータ形式の設定は、デバイス取得およびデバイス使用を始める前に行う基本的な手順である。デバイスから直接データ (状態データ) を取得することを目的としていない場合でも、データ形式を設定しなければならない。DirectInput では多くのメソッドでデータ形式を使用し、特定のデバイス オブジェクトを識別する。

[C++]

デバイス オブジェクトが使用するデバイスとデータ配列の方法は、IDirectInputDevice7::SetDataFormat メソッドが DirectInput に対して指示する。

DIDATAFORMAT 構造体および DIOBJECTDATAFORMAT 構造体のリファレンス中の例には、非標準デバイスに対してカスタム データ形式を設定する方法が示されている。この設定手順は幸いにも、ジョイスティック、キーボード、およびマウスには不要である。DirectInput は、5 つのグローバル変数、すなわち c_dfDIJoystickc_dfDIJoystick2c_dfDIKeyboardc_dfDIMouse、および c_dfDIMouse2 を提供している。これらの変数を SetDataFormat に渡してジョイスティック、キーボード、およびマウスに対する標準データ形式を作成することができる。

以下のサンプル コードで、lpdiMouse は、DirectInputDevice オブジェクトに対する初期化されたポインタである。

lpdiMouse->SetDataFormat(&c_dfDIMouse);

 :  事前定義された DIDATAFORMAT グローバル変数は const 変数であるので、この中の dwFlags メンバを (たとえば、軸のプロパティを変更するために) 変更することはできない。プロパティを変更するには、データ形式を設定した後で、デバイスを取得する前に、IDirectInputDevice7::SetProperty を使用する。

[Visual Basic]

デバイス オブジェクトが使用するデバイスとデータ配列の方法は、DirectInputDevice.SetCommonDataFormat メソッドと DirectInputDevice.SetDataFormat メソッドが DirectInput に対して指示する。

マウス、キーボード、および DIJOYSTATE 型または DIJOYSTATE2 型で記述できる入力データを持つその他のゲーム コントローラなど、標準デバイスの場合、SetCommonDataFormat メソッドを呼び出して、CONST_DICOMMONDATAFORMATS 列挙から定数を渡すことにより、データ形式を設定できる。ほとんどのアプリケーションにとって、共通のデータ形式を使用することが好ましい。

特殊デバイスの場合は、データ形式の記述を SetDataFormat メソッドに渡す必要がある。以下のコードは、2 つの軸を持ちボタンを持たないデバイスに、データ形式を設定する例である。どちらの軸も、データとして Long を要求する。

Dim dx As New DirectX7
Dim di As DirectInput
Dim did As DirectInputDevice
Dim fD As DIDATAFORMAT
Dim fDA(1) As DIOBJECTDATAFORMAT

Private Sub Form_Load()
Set di = dx.DirectInputCreate()
 
Set did = di.CreateDevice("GUID_SysMouse")
 
fDA(0).lFlags = DIDOI_POLLED
fDA(0).lOfs = 0
fDA(0).lType = DIDFT_RELAXIS
fDA(0).strGuid = "GUID_XAxis"
 
fDA(1).lFlags = DIDOI_POLLED
fDA(1).lOfs = 4
fDA(1).lType = DIDFT_RELAXIS
fDA(1).strGuid = "GUID_YAxis"
 
fD.dataSize = 8
fD.lFlags = DIDF_RELAXIS
fD.lObjSize = 4
fD.numObjs = 2
 
did.SetDataFormat fD, fDA()
 
End Sub