07/02(金)
ひさびさの日記。
前回悩んでた相互friendの件はとっくに解決してたんだけど、日記書いてなかった。
で、どうしたかって言うと、結局 MDxDraw <-> TSrufaceがお互いfriendな状態にした。そもそも、TSurfaceの派生クラスでプライマリサーフェスのクラスとバックサーフェスのクラスを書けばMDxDrawからTSurfaceを見えるようにする必要はないんだけど、手を抜いたのでこっちも見えるようになっている。
TSurfaceからMDxDrawが見えるのはいい感じだと思う。
TSurfaceのコンストラクタでMDxDrawのSurfaceリストに自分自身を追加する。
デストラクタで、自分自身を削除する。
MDxDrawはDisplayModeが切り替わったらSurfaceリストに登録されているサーフェスを再確保する。現状ではこうなっています。
今週アタマからDirectInputを組んでる。
と言っても、ダラダラと調査のための捨てプログラムをいくつか書いただけ。
大体解った。
後はコンポ化するだけって状態です。複数のJoyStickに対応できるようにしようと思ってたんだけど、それも簡単に出来そう。
DirectInputのEnumDeviceCallBackでDIENUM_STOPをリターンしなければ、JoyStickの数分だけ呼び出される。
JoyStickのクラスを書いて、リスト化する予定。
仕事中、あまりにヒマだったので、MIDI、CD-DA関係などを試してみる。
MCIというかVCLのMediaPlayerをいろいろ試してみる。CD-DAの一曲だけのリピートはOnNotifyイベントでは出来ないようだ。
次の曲に変わるとき(トラックをまたぐとき)にOnNotifyイベントが発生してない。うーん、困った。
一曲だけのリピートは、MediaPlayer->Positionを監視して切り替わりそうになったらPositionを再設定するって方法を使えば出来るようだが、それしかないのだろうか?
この方法を取るとしたら、メインループ中でPositionを監視するコードを書く必要がある。
あるいは、タイマーで監視するか。
どっちも、ちょっとダサイよねぇ?メインループの方が妥当かなぁ。
タイマー使った方がメインループ自体はすっきりすると思うけど、全体としてゴテゴテしてしまいそうで・・・MIDIの場合はトラックとかないので一曲終わったらOnNotifyがかかる。
CD-DAの場合とMIDIの場合で処理が別れるのがイヤだなぁ。
MIDIもOnNotify使わずにPositionなりなんかを監視する方がいいだろうか?
少し、悩むところだねぇ。