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

Form.LocationプロパティでLocationを変更すると内部的にはuser32.MoveWindowSetWindowPosが呼び出されるようだ。まあ、移動はもとよりさほど問題ではなくて、Form.WindowStyleをFormWindowState.Maximizedに変更したあとは、ウィンドゥの移動は一切行なえなくなるほうがやっかいだ。


よって、Maximizedにする前にフルスクリーンにするために解像度を変更する画面にウィンドゥを移動させて、そこでMaximizedにする必要がある。具体的なコードはこうだ。


oldStyle = form.FormBorderStyle; // 前回の状態を記録しておく
form.FormBorderStyle = FormBorderStyle.None;
form.Location = new global::System.Drawing.Point(scr.Bounds.Left , scr.Bounds.Top);
form.WindowState = FormWindowState.Maximized;

戻すときは、


form.WindowState = FormWindowState.Normal; // 通常モードに戻す必要あり
form.FormBorderStyle = oldStyle;

こうなる。


ただ、上記のコードの場合、本当にその画面で最大化されるのか、その保証がどこにもない。将来的にWindows側の実装が変更になった場合、何らかの対策が必要になるだろう。


処理の最後で、global::System.Windows.Forms.Screen.FromHandleで自分のウィンドゥの属するScreenを調べ、思っていた場所と異なるなら、再度FormWindowState.Normalにして移動させるぐらいのことはしなければならないのかも知れない。まあ、いまはそこまで考えないことにする。

(つづく)