Tag Archives: スクリーン座標

Windowsデスクトップアプリの座標関係覚書

.NETアプリ

Location

トップレベルのFormのLocationはスクリーン座標でフォームの左上の座標を表す。

ControlのLocationはコンテナからの相対座標の左上を表す。コントロールのスクリーン座標を知りたいときは、コンテナのPointToScreenにコントロールの相対座標を渡す。

最大化しているとき

フォームが最大化あるいは最小化しているときは、最大化する前のフォームの座標をRestoreBoundsから取得できる。

座標の保存

最大化しているときはRestoreBoundsを保存する。

座標の復元

このコードでは保存された座標がスクリーン上にあるかどうかは確認していない。

Win32アプリ

最大化しているとき

ウインドウが最小化されていてリストアしたとき最大化するかどうかはGetWindowPlacement()で調べることができる。WPF_RESTORETOMAXIMIZEDが立っていれば、リストアしたとき最大化する。

.NETではフォームが最小化されていて、リストアしたとき最大化するのかどうかを調べる方法はないと思われるので、Resizeイベントでその状態かどうかのフラグを用意する。

マルチスクリーン

マルチスクリーンのスクリーン座標はモニタをつなげて1つのスクリーンとみなせるような座標になる。

あるスクリーン座標がモニタ内にあるかは以下のように調べられる。(コードはC++/CLI)