次の方法で共有


DIDATAFORMAT 構造体

DIDATAFORMAT 構造体

デバイスのデータ形式を表す。この構造体は、IDirectInputDevice8::SetDataFormat メソッドで使う。

構文

typedef struct DIDATAFORMAT { 
    DWORD dwSize; 
    DWORD dwObjSize; 
    DWORD dwFlags; 
    DWORD dwDataSize; 
    DWORD dwNumObjs; 
    LPDIOBJECTDATAFORMAT rgodf; 
} DIDATAFORMAT, *LPDIDATAFORMAT;
 
typedef const DIDATAFORMAT *LPCDIDATAFORMAT;

メンバ

  • dwSize
    この構造体のサイズ (バイト単位)。
  • dwObjSize
    DIOBJECTDATAFORMAT 構造体のサイズ (バイト単位)。
  • dwFlags
    データ形式の他の属性を表すフラグ。次のいずれかの値を指定できる。
    • DIDF_ABSAXIS
      軸は絶対モードにある。このフラグをデータ形式に設定することは、IDirectInputDevice8::SetProperty メソッドを使って軸モード プロパティを手動で設定するのと等しい。この値は、DIDF_RELAXIS フラグと組み合わせることはできない。
    • DIDF_RELAXIS
      軸は相対モードにある。このフラグをデータ形式に設定することは、IDirectInputDevice8::SetProperty メソッドを使って軸モード プロパティを手動で設定するのと等しい。この値は、DIDF_ABSAXIS フラグと組み合わせることはできない。
  • dwDataSize
    デバイスが返すデータ パケットのサイズ (バイト単位)。この値は、4 の倍数であり、かつデータ パケット内のオブジェクト データの最大オフセット値より大きくなければならない。
  • dwNumObjs
    rgodf 配列内のオブジェクト数。
  • rgodf
    DIOBJECTDATAFORMAT 構造体の配列のアドレス。各構造体は、1 つのオブジェクト データがデバイス データの中でどのように報告されるのかを記述する。典型的なエラーとしては、2 種類の情報を同じ位置に格納したり、1 種類の情報を複数の位置に格納したりするものがある。

注意

通常、アプリケーションは DIDATAFORMAT 構造体を作成する必要はない。アプリケーションは、事前定義されたグローバル データ形式変数の c_dfDIMousec_dfDIMouse2c_dfDIKeyboardc_dfDIJoystick、または c_dfDIJoystick2 のいずれかを使えるからである。

DIDATAFORMAT 構造体を作成する必要があるアプリケーションは、最初に IDirectInputDevice8::EnumObjects を呼び出して、現在のデバイスで使用可能なオブジェクトを判断しなければならない。この理由は、オブジェクトが DIDATAFORMAT 構造体に記述されていても、現在のデバイスには存在しない場合、IDirectInputDevice8::SetDataFormat メソッドは DIERR_INVALIDPARAM を返すためである。

次のサンプル コードでは、X 軸と Y 軸があるデバイスのデータ形式を設定している。

// Suppose an application uses the following 
// structure to read device data. 

typedef struct MYDATA { 
    LONG  lX;                   // X-axis goes here. 
    LONG  lY;                   // Y-axis goes here. 
    BYTE  bButtonA;             // One button goes here. 
    BYTE  bButtonB;             // Another button goes here. 
    BYTE  bPadding[2];          // Must be DWORD multiple in size. 
} MYDATA; 

// Then, it can use the following data format. 

DIOBJECTDATAFORMAT rgodf[ ] = { 
  { &GUID_XAxis, FIELD_OFFSET(MYDATA, lX),
    DIDFT_AXIS | DIDFT_ANYINSTANCE, 0, }, 
  { &GUID_YAxis, FIELD_OFFSET(MYDATA, lY), 
    DIDFT_AXIS | DIDFT_ANYINSTANCE, 0, }, 
  { &GUID_Button, FIELD_OFFSET(MYDATA, bButtonA),
    DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0, }, 
  { &GUID_Button, FIELD_OFFSET(MYDATA, bButtonB), 
    DIDFT_BUTTON | DIDFT_ANYINSTANCE, 0, }, 
}; 
#define numObjects (sizeof(rgodf) / sizeof(rgodf[0])) 

DIDATAFORMAT df = { 
    sizeof(DIDATAFORMAT),       // Size of this structure 
    sizeof(DIOBJECTDATAFORMAT), // Size of object data format 
    DIDF_ABSAXIS,               // Absolute axis coordinates 
    sizeof(MYDATA),             // Size of device data 
    numObjects,                 // Number of objects 
    rgodf,                      // And here they are 
}; 

構造体の情報

ヘッダー dinput.h
最低限のオペレーティング システム Windows 98

参照

DIACTIONFORMAT