Microsoft DirectX 8.0 (C++)

ステップ 4 : マウスからのバッファリング データ入力の準備

Scrawl アプリケーションは、イベント通知を使用してマウスの動作を検出する方法、およびマウスからのバッファリング入力を読み取る方法を示している。この方法はどちらも、ある程度のセットアップを必要とする。それらの手順は、マウス デバイスの作成後で、マウス デバイスの取得前であればいつでも実行できる。

まず、イベントを作成し、マウス デバイスと関連付ける。これにより、新たな有効データが発生したことを示すハードウェア割り込みがあれば、いつでもマウス デバイス オブジェクトに通知するように、Microsoft® DirectInput® に指示していることになる。

以下は Scrawl での処理方法である。ここで、g_hevtMouse はグローバル HANDLE である。

g_hMouseEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
 
if (g_hMouseEvent == NULL) {
    return FALSE;
}
 
hr = g_pMouse->SetEventNotification(g_hMouseEvent);
 
if (FAILED(hr)) {
    return FALSE;
}
 

この段階でバッファ サイズを設定する必要がある。これは、プログラムが入力データを参照する用意ができるまで、DirectInput があらゆる入力データを格納できるようにするためである。デフォルトのバッファ サイズはゼロであるため、バッファリング データを使用するにはこの手順が不可欠であることに注意する。

イベント通知にバッファリング データを使用する必要はない。必要であれば、イベントが送信されたときに直接データを取得することができる。

バッファ サイズを設定するには、DIPROPDWORD 構造体を、構造体自体についての情報と、設定したいプロパティについての情報で初期化する。ほとんどの値は定型的なものである。重要な値は最後の dwData であり、これはバッファが保持する項目数に初期化する。

#define SAMPLE_BUFFER_SIZE  16
 
DIPROPDWORD dipdw;
    // ヘッダー
    dipdw.diph.dwSize       = sizeof(DIPROPDWORD);
    dipdw.diph.dwHeaderSize = sizeof(DIPROPHEADER);
    dipdw.diph.dwObj        = 0;
    dipdw.diph.dwHow        = DIPH_DEVICE;
    // データ
    dipdw.dwData            = SAMPLE_BUFFER_SIZE;
 

次に、ヘッダー (DIPROPDWORD 構造体内の DIPROPHEADER 構造体) のアドレスと、変更したいプロパティの識別子を、次のように IDirectInputDevice8::SetProperty メソッドに渡す。

hr = g_pMouse->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph);
 
if (FAILED(hr)) {
    return FALSE;
}
 

これでセットアップは完了し、いつでもマウスを取得してデータの収集を始められる。

アプリケーションでのマウスからのバッファリング データ入力の準備が終わったら、「ステップ 5 : マウスへのアクセス権の管理」に進む。