次の方法で共有


DIDATAFORMAT

デバイスのデータ フォーマットを指定します。この構造体は、IDirectInputDevice8::SetDataFormat メソッドで使用されます。

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

メンバ

  • dwSize
    この構造体のサイズ (バイト)。
  • dwObjSize
    DIOBJECTDATAFORMAT 構造体のサイズ (バイト単位)。
  • dwFlags
    データ フォーマットのその他の属性を指定するフラグ。これは次のいずれかの値です。
    • DIDF_ABSAXIS
      軸は絶対モードです。データ フォーマット内でこのフラグを設定することは、IDirectInputDevice8::SetProperty メソッドを使用して軸モード プロパティを手動で設定することと同じです。これを DIDF_RELAXIS フラグと組み合わせて指定することはできません。
    • DIDF_RELAXIS
      軸は相対モードです。データ フォーマット内でこのフラグを設定することは、IDirectInputDevice8::SetProperty メソッドを使用して軸モード プロパティを手動で設定することと同じです。これを DIDF_ABSAXIS フラグと組み合わせて指定することはできません。
  • dwDataSize
    デバイスから返されるデータ パケットのサイズ (バイト)。この値は 4 の倍数であり、データ パケット内のオブジェクトのデータに対する最大オフセット値を上回っている必要があります。
  • dwNumObjs
    rgodf 配列内のオブジェクト数。
  • rgodf
    DIOBJECTDATAFORMAT 構造体の配列のアドレス。それぞれの構造体は、デバイス データ内でオブジェクトのデータを報告する方法を示しています。よくあるエラーとしては、同じ場所に 2 つの情報を配置したり、複数の場所に 1 つの情報を配置したりすることがあります。

解説 

アプリケーションは通常、DIDATAFORMAT 構造体を作成する必要はありません。アプリケーションは、定義済みのグローバル データ フォーマット変数 c_dfDIMouse、 c_dfDIMouse2、 c_dfDIKeyboard、 c_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 
}; 

関連項目

DIACTIONFORMAT