と言うわけで書くことを保留していましたが、Ver 0.29はすでに公開されてからこの日記の時間で3週間前後は経過しています。
その間に落とした人もいるかと思いますが、とりあえず説明をつけて、ですね。
Ver 0.27の更新は主にウィンドウ検知の状態修正
WindowModePatchのようなプログラムを作るとWindowsのシステムに隠された驚くべきごまかしが見えてくるのが面白いです。
それに引っかかってしまうのがとても悲しいですが・・・。
今回の主な要点は
「RegisterClass(Ex)に渡されるWNDCLASS(EX)構造体のメンバhInstanceは実はNULLでもかまわない」(NULLの場合は自動的にGetModuleHandle(NULL)の値が割り当てられる様子)
というものです。
MSDNの説明をどう見ても「NULLでもよい」なんて書かれていませんよ・・・。
ちなみに、パレット処理も更新、と書いてありますが、ほとんど変わっていません。
パレットのエミュレーションをするならかなり苦労が必要だろうな~と思っています。
内部を32bitRGBで保持して、描画そのものは32bitRGBのbltとして処理、必要なタイミングで32bitRGB=>8bitPaletteを行う、みたいなことをやるんでしょうが、
DirectDrawとかだと透明色転送が思いの外面倒と言うことは分かっていますし・・・。
これをやったら8bitで処理していたほとんどのプログラムがエミュレーション、と言うおちになってすごいでしょうね。
Ver 0.28の更新はウィンドウサイズ可変で作成しているのにサイズを強制固定している物を修正
つまるところ、マウスカーソルを枠に持って行くとサイズ変更が出来るようなアイコンになるのに、枠を持って変更しようとすると変更はされない、と言うパターンです。
そのパターンのプログラムをほとんど作ったことがなかったのでその制御をどうやってやっているのかを調べるのに苦労しました。
ウィンドウサイズが変更可能で、変更をしようとしたとき、ウィンドウプロシージャにはWM_GETMINMAXINFOによりどのサイズまで変更して良いか?を確認される、と言う物です。
この頃のゲームだと補間処理が簡単になってきたためにウィンドウサイズが変更可能となっている物も増えていますけれどね・・・。
Ver 0.29の更新は・・・
プログラム内にあるデータにちょっと細工を加えた物です。動作そのものはVer 0.28と全く変わりません。
だいぶ対応作品が上がってきたかな~
という感じですね。無節操に対応している物だから、たぶん途中で非対応化した物があるかも・・・。
データベース化してみたい気もしますが、過去作をやる人というのがそこまでいないような気もしますし・・・。