C#2.0時代のゲームプログラミング(22)

めでたくdisplay解像度の変更が出来た。しかし、これで終わりではない。ここから先が長いのだ。

# okzk 『流れをぶった切りますが、FormBorderStyleをNoneにするなら、WindowStateを変更せずにform.Bounds = scr.Bounds;としてはマズイですか?』

# yaneurao 『それだとタスクバーがフォームより前面に来ます。そこさえ回避できるなら、それでもいいとは思うのですけども。』


すまん。間違えていた。私の実験の仕方が悪かった。これは、okzkさんの意見が正しい。WindowStateは変更するとLocationプロパティでWindowを移動できなくなるので、このあと困るのだ。WindowStateは変更しないで済むならばそれに越したことはない。


例えば、いま二つのアプリを立ち上げて、ひとつを画面2でフルスクリーン化、もうひとつを画面1で最大化したとしよう。画面1の最大化にともなって、画面2の仮想スクリーン座標におけるBoundsは変更になる。これに伴って、画面2でフルスクリーン化しているアプリは(WM_ACTIVATEAPPやForm.Activatedなどのハンドラにおいて)自分のLocationを変更しなければならない。そのときに、WindowStateをMaximizedにしてしまっていると、いったんNormalに変更して、そのあとMaximaizedにしないといけないのでウィンドゥの“変更アニメーション”が出てしまう。このように、WindowStateを書き換えるといらぬ苦労が伴うのだ。


ただし、form.Bounds = scr.Bounds;とする場合、multi displayだと別の理由でまずいことが生じる。誰しもがあっと驚くようなことが待ち受けているのだ。(つづく)