こゝろ対策2
昨日に続いて、ハーツのバグ対策です。
WM_CREATE では、駄目なので、他に良いウィンドウメッセージが無いかなーと考えた結果、 WM_PAINT を使ってみることにしました。ウィンドウ作成した後、絶対、 WM_PAINT メッセージが発行されるはずだ、と思い、書き直してみました。で、ビルドして動かしてみると、うまくいったようです。きちんと成績表のサイズが変わっています。(とりあえず動いたプログラムその1(zipで圧縮しています))でもでも、 WM_PAINT メッセージじゃあ、ウィンドウ再描画した時もウィンドウサイズ変更が行われてしまうということに気が付きました。 GetWindowRect 関数で取ってきたウィンドウサイズより少し大きいサイズに変更すると言うことをしているので、再描画される度にどんどんウィンドウが大きくなってしまうなぁ…。と、思ったのですが、あれ、大丈夫だ…。何故???
とりあえず、うまくいったようですが、何か気持ち悪いですね。そもそも、 WM_PAINT でウィンドウサイズ変えるのって、邪道っぽいですし…。ということで、別の方法を考えてみました。で、昨日 WM_CREATE でサイズを変えようとしていた時を思い出すと、ウィンドウ作成時にはウィンドウタイトルが設定されていませんでした。きっと、この後でウィンドウタイトルを変えているに違いないので、 WM_SETTEXT メッセージが発行されているはずです。この時にウィンドウサイズを変えればいいのではないかと思い、試してみました。…ビンゴです!見事、ウィンドウサイズが変わりました。それに、これならば、変更後のタイトルが lParam で分かるので、処理が簡潔になります。今度こそ成功か?と思って、色々と試していたのですが、ゲーム終了時の「あなたの勝ち !」とか「ゲーム オーバー」というタイトルのウィンドウは、「成績表」のウィンドウよりひとまわり大きいようなのです。詳しく調べてみると、まず、「成績表」にタイトルが変更され、その後「あなたの勝ち !」等に再びタイトルが変更されているようなのです。…なんて無駄な処理をしているんだ。つまり2回タイトル変更しているので、2回ウィンドウサイズを変えてしまっていたのです。ウィンドウタイトルの判定を「成績表」だけにしてみたら、同じサイズになりました。けれども、何か変な感じですね…。(とりあえず動いたプログラムその2(zipで圧縮しています))
これでもう大丈夫…かな?最終的なプログラムをビルドしたものも公開しておきます。(実行形式(zipで圧縮しています))
これを解凍すると HSS_Main.exe と HSS_Sub.dll ファイルが出来ます。このファイルを二つともどこか適当なフォルダに置いて、 HSS_Main.exe をダブルクリックするとハーツが起動するはずです。成績表がきちんと大きくなっていることを試して下さいね。普通に起動したハーツの成績表と比べると大きくなっているのが良く分かります。
これで、勝負が長引いても、ちゃんと最後の得点が分かりますねー。良かった、良かった。…でも、よく考えると、フックなんか使わないで、タイマーでウィンドウを監視してサイズを変更するだけでも良かったのではないかとか思ったりして…。色々勉強になったから良いですか、ね。
| 固定リンク
この記事へのコメントは終了しました。
コメント