DirectXライブラリ自作2

DirectX 9実践プログラミング―「グラフィック」「オーディオ」「ネットワーク」「入力」--ゲーム作りに役立つ機能の基礎から応用まで (I/O別冊)を参考に、2日かけてDirectSoundのラッパークラスを作成。
半日ぐらいでできると思ったのですが、dxutil.hとdsutil.hがどこにあるか気づかずに、
半日無駄にしてしまった、、(←ちゃんと本を読みなさい)
 
しかし、DirectXSDKのサンプルである「dxutil」や「dsutil」を使っているのはどうかと思ったのですが、、。
まあ、とりあえずは今後の課題ということで。
 
調子に乗って、DirectInputのラッパークラスを作成。
 
マウスの入力はDirectInputだと、座標が謎の数値しかとれないので、WindowsAPIで取得。
 
で、キーボードの入力をDirectInputを実装しようとする。
が、デバイスのロストで引っかかる。
 
ウィンドウがアクティブでなくなるとデバイスがロストするので、
ロスト時にIDirectInputDevice8->Acquire()する処理を入れました。
 
しかし、なぜかデバイスが帰ってきません。(トホホ)

DirectInput使えねー、こっちもWindowsAPIでやるか〜?
と思ったけど、ソースが無駄になるのも悔しいので本を読んでみると、

CALLBACK関数でデバイスの入力を受け取ると、キューが溜まってしまい、
リアルタイムに処理ができなくなります。
DirectInputではリアルタイムに処理を受け取ることができます。

あ、なるほど。
そういやDirectInputのRefreshをCALLBACK関数でやっていたなー。

と、WindowクラスのIdle処理の中でRefreshするようにしたら、
あっさりデバイスが復活してくれました。
 
なるほど、設計思想をちゃんと理解しないとダメですね。
 
あと、本もちゃんと読まないと…、、。(反省)