キーボードのバッファリング データ
キーボードのバッファリング データ
キーボードからバッファリング データを取得するためには、バッファ サイズを設定しなければならない (「デバイス プロパティ」を参照すること)。この手順は、バッファのデフォルト サイズがゼロであるので不可欠である。
また、DIDEVICEOBJECTDATA 構造体の配列も宣言する必要がある。この配列は、最大でバッファ サイズと同数の要素を持つことができる。1 回の呼び出しでバッファの内容全体を取得する必要はない。配列内の 1 要素だけを保持して、バッファが空になるまで 1 つずつイベントを取得することができる。
キーボード デバイスの取得後は、IDirectInputDevice8::GetDeviceData メソッドを使っていつでもバッファを調べたりフラッシュしたりできる(「バッファリング データと直接データ」を参照すること)。
DIDEVICEOBJECTDATA 配列の各要素は、単一キーの状態変化、つまり、押し下げまたは解放を表す。Microsoft® DirectInput® は、キーボードから直接データを取得するために、コントロール パネルの文字反復の設定はすべて無視する。これは、キーストロークは、キーが押し下げられている時間の長短に関係なく、1 回しかカウントされないことを意味する。
配列中の要素がどのキーを指すかは、DirectInput のキーボード デバイス定数と、DIDEVICEOBJECTDATA 構造体の dwOfs メンバを比較することにより確認できる (「キーボード データの解釈」も参照すること)。
アクション マップを使っている場合は、dwOfs の値を無視し、キー イベントに関連するアプリケーション定義データを uAppData メンバから取得する。
キーの状態変化データは、DIDEVICEOBJECTDATA 構造体の dwData メンバに格納されている。dwData の下位バイトだけが有意である。上位ビットはキーが押されたときに設定され、キーが離されたときに消去される。言い換えれば、(dwData & 0x80) がゼロでないとき、キーが押されていることになる。