次の方法で共有


DIOBJECTDATAFORMAT

IDirectInputDevice8::SetDataFormat メソッドで使用するデバイス オブジェクトのデータ フォーマットを記述します。 

typedef struct DIOBJECTDATAFORMAT {
    CONST GUID * pguid;
    DWORD dwOfs;
    DWORD dwType;
    DWORD dwFlags;
} DIOBJECTDATAFORMAT, *LPDIOBJECTDATAFORMAT;

メンバ

  • pguid
    軸、ボタン、またはその他の入力ソースの一意の識別子です。データ フォーマットの要求時に、このメンバーを NULL にすると、すべてのタイプのオブジェクトが許可されます。
  • dwOfs
    入力ソースのデータが保存されているデータ パケット内のオフセットです。この値は、軸などの DWORD サイズ データに対応するように 4 の倍数でなければなりません。ボタンの場合はバイト整列にすることができます。
  • dwType
    オブジェクトを表すデバイス タイプです。オブジェクト タイプ (軸、ボタンなど) を表す以下のフラグの組み合わせで、中央の 16 ビットにオブジェクトのインスタンス番号が格納されます。データ フォーマットの要求時に、インスタンス部分を DIDFT_ANYINSTANCE に設定すると、任意のインスタンスが許可されます。また、DIDFT_MAKEINSTANCE(n) に設定すると、要求がインスタンス n に限定されます。「解説」の例を参照してください。
    • DIDFT_ABSAXIS
      IDirectInputDevice8::SetDataFormat メソッドによって選択されたオブジェクトは、絶対軸である必要があります。
    • DIDFT_AXIS
      IDirectInputDevice8::SetDataFormat メソッドによって選択されたオブジェクトは、絶対軸または相対軸である必要があります。
    • DIDFT_BUTTON
      IDirectInputDevice8::SetDataFormat メソッドによって選択されたオブジェクトは、押しボタンまたはトグル ボタンである必要があります。
    • DIDFT_FFACTUATOR
      IDirectInputDevice8::SetDataFormat メソッドによって選択されたオブジェクトは、フォース フィードバック アクチュエータを含む必要があります。つまり、フォースをオブジェクトに適用できなければなりません。
    • DIDFT_FFEFFECTTRIGGER
      IDirectInputDevice8::SetDataFormat メソッドによって選択されたオブジェクトは、有効なフォース フィードバック エフェクト トリガーである必要があります。
    • DIDFT_POV
      IDirectInputDevice8::SetDataFormat メソッドによって選択されたオブジェクトは、視点コントローラーである必要があります。
    • DIDFT_PSHBUTTON
      IDirectInputDevice8::SetDataFormat メソッドによって選択されたオブジェクトは、押しボタンである必要があります。
    • DIDFT_RELAXIS
      IDirectInputDevice8::SetDataFormat によって選択されたオブジェクトは、相対軸である必要があります。
    • DIDFT_TGLBUTTON
      IDirectInputDevice8::SetDataFormat によって選択されたオブジェクトは、トグル ボタンである必要があります。
    • DIDFT_VENDORDEFINED
      IDirectInputDevice8::SetDataFormat によって選択されたオブジェクトは、メーカー定義のタイプである必要があります。
  • dwFlags
    次の値を 1 つ以上指定するか、まったく指定しません。
    • DIDOI_ASPECTACCEL
      IDirectInputDevice8::SetDataFormat によって選択されたオブジェクトは、加速情報を報告する必要があります。
    • DIDOI_ASPECTFORCE
      IDirectInputDevice8::SetDataFormat によって選択されたオブジェクトは、フォース情報を報告する必要があります。
    • DIDOI_ASPECTPOSITION
      IDirectInputDevice8::SetDataFormat によって選択されたオブジェクトは、位置情報を報告する必要があります。
    • DIDOI_ASPECTVELOCITY
      IDirectInputDevice8::SetDataFormat によって選択されたオブジェクトは、速度情報を報告する必要があります。

解説 

データ フォーマットは、オブジェクト (軸、ボタンなど) ごとに 1 つずつ、複数の DIOBJECTDATAFORMAT 構造体で構成されます。これらの構造体の配列は、IDirectInputDevice8::SetDataFormat に渡される DIDATAFORMAT 構造体に格納されます。アプリケーションは通常、DIOBJECTDATAFORMAT 構造体の配列を作成する必要はなく、事前定義されている次のデータ フォーマットのいずれかを使用できます。 c_dfDIMouse、 c_dfDIMouse2、 c_dfDIKeyboard、 c_dfDIJoystick、または c_dfDIJoystick2 のいずれかです。これらには、DIOBJECTDATAFORMAT について事前定義された設定があります。

次のオブジェクト データ フォーマットは、DirectInput が使用可能な最初の軸を選択し、デバイス データのオフセット 4 にある DWORD でその値を報告する必要があることを指定しています。

DIOBJECTDATAFORMAT dfAnyAxis = { 
    0,                              // Wildcard 
    4,                              // Offset 
    DIDFT_AXIS | DIDFT_ANYINSTANCE, // Any axis is okay. 
    0,                              // Ignore aspect 
}; 

次のオブジェクト データ フォーマットは、デバイス データのオフセット 12 にある DWORD にデバイスのx 軸を格納する必要があることを指定しています。デバイスに複数の x 軸がある場合は、使用可能な最初の軸が選択されます。

DIOBJECTDATAFORMAT dfAnyXAxis = { 
    &GUID_XAxis,                    // Must be an x-axis 
    12,                             // Offset 
    DIDFT_AXIS | DIDFT_ANYINSTANCE, // Any x-axis is okay. 
    0,                              // Ignore aspect 
}; 

次のオブジェクト データ フォーマットは、DirectInput が使用可能な最初のボタンを選択し、デバイス データのオフセット 16 にあるバイトの上位ビットでその値を報告する必要があることを指定しています。

DIOBJECTDATAFORMAT dfAnyButton = { 
    0,                                // Wildcard 
    16,                               // Offset 
    DIDFT_BUTTON | DIDFT_ANYINSTANCE, // Any button is okay. 
    0,                                // Ignore aspect 
}; 

次のオブジェクト データ フォーマットは、デバイス データのオフセット 18 に格納されているバイトの上位ビットとしてデバイスのボタン 0 を報告する必要があることを指定しています。

デバイスにボタン 0 がない場合、このデータ フォーマットの設定は失敗します。

DIOBJECTDATAFORMAT dfButton0 = { 
    0,                                    // Wildcard 
    18,                                   // Offset 
    DIDFT_BUTTON | DIDFT_MAKEINSTANCE(0), // Button zero 
    0,                                    // Ignore aspect 
};