DIDEVICEOBJECTDATA
バッファー デバイスの情報を格納します。この構造体は、IDirectInputDevice8::GetDeviceData および IDirectInputDevice8::SendDeviceData メソッドで使用されます。
typedef struct DIDEVICEOBJECTDATA {
DWORD dwOfs;
DWORD dwData;
DWORD dwTimeStamp;
DWORD dwSequence;
UINT_PTR uAppData;
} DIDEVICEOBJECTDATA, *LPDIDEVICEOBJECTDATA;
メンバ
- dwOfs
IDirectInputDevice8::GetDeviceData の場合、データを報告するオブジェクトの現在のデータ フォーマットへのオフセットです。つまり、IDirectInputDevice8::GetDeviceState メソッドの呼び出しによってデータが取得された場合、dwData が格納されている場所です。デバイスがマウス、キーボード、またはジョイスティックとしてアクセスされる場合、dwOfs メンバーは、マウス デバイス定数、キーボード デバイス定数、またはジョイスティック デバイス定数のいずれかになります。カスタム データ フォーマットが設定されている場合は、カスタム データ フォーマットに関するオフセットです。 IDirectInputDevice8::SendDeviceData の場合、DIDEVICEOBJECTINSTANCE 構造体の dwType メンバーから取得されたデータが送信されるオブジェクトのインスタンス ID です。 - dwData
デバイスから取得されるデータ、またはデバイスに送信されるデータです。 軸からの入力の場合、デバイスが相対軸モードであれば、相対軸の動きが報告されます。デバイスが絶対軸モードであれば、絶対軸座標が報告されます。 ボタンからの入力の場合、dwData の下位バイトのみが重要です。下位バイトの上位ビットは、ボタンが押されたときに設定され、放されたときに消去されます。 - dwTimeStamp
入力イベントが生成されたシステム時間 (ミリ秒単位) です。この値は、約 50 日ごとにラップ アラウンドします。「解説」を参照してください。 この構造体を IDirectInputDevice8::SendDeviceData メソッドで使用する場合、このメンバーは 0 になる必要があります。 - dwSequence
このイベントの DirectInput シーケンス番号です。すべての入力イベントに昇順のシーケンス番号が割り当てられます。これによって、個々のデバイスのイベントを発生順にソートすることができます。この値はラップ アラウンドすることがあるので、2 つのシーケンス番号を比較するときには注意が必要です。DISEQUENCE_COMPARE マクロを使用すると、この比較を安全に行うことができます。 この構造体を IDirectInputDevice8::SendDeviceData メソッドで使用する場合、このメンバーは 0 になる必要があります。 - uAppData
前回の IDirectInputDevice8::SetActionMap の呼び出しでこのオブジェクトに割り当てられた、アプリケーション定義のアクション値です。これは、オブジェクトに関連付けられた DIACTION 構造体の uAppData メンバーの値です。アクション マッピングを使用していない場合は、この値を無視してください。 この構造体を IDirectInputDevice8::SendDeviceData メソッドで使用する場合、このメンバーはゼロになる必要があります。
解説
dwTimeStamp で返されるシステム時間は、Microsoft Win32 の GetTickCount または timeGetTime 関数が使用するのと同じクロックのものですが、より正確な値を生成する能力があります。たとえば、Microsoft Windows 95 では、GetTickCount タイマーは 55 ミリ秒ごとにしか更新されませんが、dwTimeStamp の値は、誤差 1 ミリ秒以内の正確さです。そのため、GetTickCount を呼び出し、n が返された場合、n + n1 というタイムスタンプのイベントを受け取っても、GetTickCount を呼び出してからちょうど n1 ミリ秒後にそのイベントが発生したと仮定することはできません。