Microsoft DirectX 8.0 (C++)

キーボードのバッファリング データ

キーボードからバッファリング データを取得するには、バッファ サイズを設定しなければならない (「デバイス プロパティ」を参照すること)。この手順は、バッファのデフォルト サイズがゼロであるので不可欠である。

また、DIDEVICEOBJECTDATA 構造体の配列も宣言する必要がある。この配列は、最高でバッファ サイズと同数の要素を持つことができる。1 度の呼び出しでバッファの内容全体を取得する必要はない。配列内の 1 要素だけを保持して、バッファが空になるまで 1 つずつイベントを取得することができる。

キーボード デバイスの取得後は、IDirectInputDevice8::GetDeviceData メソッドを使っていつでもバッファを調べたりフラッシュしたりすることができる (「バッファリング データと直接データ」を参照すること)。

DIDEVICEOBJECTDATA 配列の各要素は、単一キーの状態変化、すなわち、押下または解放を表す。Microsoft® DirectInput® は、キーボードから直接データを取得するために、コントロール パネルの文字反復の設定はすべて無視する。すなわち、キーストロークは、キーが押下されている時間の長短に関係なく、1 度しかカウントされないということになる。

配列中の要素がどのキーを指すかは、DirectInput のキーボード デバイス定数と、DIDEVICEOBJECTDATA 構造体の dwOfs メンバを比較することにより確認できる (「キーボード データの解釈」も参照すること)。

アクション マッピングを使用している場合は、dwOfs の値を無視し、キー イベントに関連するアプリケーション定義データを uAppData メンバから取得する。

キーの状態変化データは、DIDEVICEOBJECTDATA 構造体の dwData メンバに格納されている。dwData の下位バイトだけが有意である。上位ビットはキーが押されたときに設定され、キーが離されたときに消去される。言い換えれば、(dwData & 0x80) がゼロでないとき、キーが押されていることになる。