Platform SDK: DirectX |
ここでは、C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectInput Visual Basic チュートリアル」を参照すること。
Scrawl アプリケーションは、イベント通知を使用してマウスの動作を検出する方法、およびマウスからのバッファリング入力を読み取る方法を示している。この方法はどちらも、ある程度のセットアップを必要とする。それらの手順は、マウス デバイスの作成後で、マウス デバイスの取得前であればいつでも実行できる。
まず、イベントを作成し、マウス デバイスと関連付ける。これにより、新たな有効データが発生したことを示すハードウェア割り込みがあれば、いつでもマウス デバイス オブジェクトに通知するように、DirectInput に指示していることになる。
以下は Scrawl での処理方法である。ここで、g_hevtMouse はグローバル HANDLE である。
g_hevtMouse = CreateEvent(0, 0, 0, 0); if (g_hevtMouse == NULL) { return FALSE; } hr = g_pMouse->SetEventNotification(g_hevtMouse); if (FAILED(hr)) { return FALSE; }
まず、この段階でバッファ サイズを設定する必要がある。これは、プログラムが入力データを参照する用意ができるまで、DirectInput があらゆる入力データを格納できるようにするためである。デフォルトのバッファ サイズはゼロであるので、この手順は、バッファリング データを使う場合の基本的手順であることを、覚えておくこと。
イベント通知では、バッファリング データを使用する必要はない。ただし、必要に応じて、イベント通知の直後にデータを取得することもできる。
バッファ サイズを設定するには、DIPROPDWORD 構造体を、構造体自体についての情報と、設定したいプロパティについての情報で初期化する必要がある。ほとんどの値は、定型的なものだが、最後の dwData は重要な値である。これは、バッファが保持する項目数に初期化する。
#define DINPUT_BUFFERSIZE 16 DIPROPDWORD dipdw = { // ヘッダー { sizeof(DIPROPDWORD), // diph.dwSize sizeof(DIPROPHEADER), // diph.dwHeaderSize 0, // diph.dwObj DIPH_DEVICE, // diph.dwHow }, // データ DINPUT_BUFFERSIZE, // dwData };
次に、ヘッダー (DIPROPDWORD 構造体内の DIPROPHEADER 構造体) のアドレスと、変更したいプロパティの識別子を、次のように IDirectInputDevice7::SetProperty メソッドに渡す。
hr = g_pMouse->SetProperty(DIPROP_BUFFERSIZE, &dipdw.diph); if (FAILED(hr)) { return FALSE; }
これでセットアップは完了し、いつでもマウスを取得してデータの収集を始められる。