DirectX SDK |
The DIDATAFORMAT structure carries information describing a device's data format. This structure is used with the IDirectInputDevice7::SetDataFormat method.
typedef struct DIDATAFORMAT { DWORD dwSize; DWORD dwObjSize; DWORD dwFlags; DWORD dwDataSize; DWORD dwNumObjs; LPDIOBJECTDATAFORMAT rgodf; } DIDATAFORMAT, *LPDIDATAFORMAT; typedef const DIDATAFORMAT *LPCDIDATAFORMAT;
Applications do not typically need to create a DIDATAFORMAT structure. An application can use one of the predefined global data format variables, c_dfDIMouse, c_dfDIMouse2, c_dfDIKeyboard, c_dfDIJoystick, or c_dfDIJoystick2.
The following code example sets a data format that can be used by applications that need two axes (reported in absolute coordinates) and two buttons:
// 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), // this structure sizeof(DIOBJECTDATAFORMAT), // size of object data format DIDF_ABSAXIS, // absolute axis coordinates sizeof(MYDATA), // device data size numObjects, // number of objects rgodf, // and here they are };
Windows NT/2000: Requires Windows 2000.
Windows 95/98: Requires Windows 95 or later. Available as a redistributable for Windows 95.
Header: Declared in dinput.h.