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_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
};
構造体の情報
ヘッダー | dinput.h |
最低限のオペレーティング システム | Windows 98 |
参照