【C#】画面上に線を引きたい #3(モニタサイズの取得)

スポンサーリンク

知人に作ってほしいと言われたソフトもとうとう終盤です。
今回はモニタのサイズを取得することができれば、パーツが整います!
頑張りましょう!

【C#】画面上に線を引きたい #2(画面を透明に) | 育児パパの人生備忘録 (t19488sns.com)

要望の整理

簡単ですが要望をまとめたいと思います。
1.画面の中心線を引く
2.画面の背景は透明
3.線の色は選択可能

この要望から、必要な知識は、下記になります。
★線の引き方
★中心線の計算方法
★画面を透明にする方法
★線の色の指定方法
★画面の大きさの取得

モニタ(ディスプレイ)のサイズの取得方法

Screenクラスを使います。(NameSpaceは、System.Windows.Forms)

モニタが1台の時

モニタが1台の時は、プライオリティスクリーンを取得します。

using System.Windows.Forms;
(省略)
private void GetMonitor()
{
    int tate = Screen.PrimaryScreen.Bounds.Height; //高さ
    int yoko = Screen.PrimaryScreen.Bounds.Width;  //幅
}

モニタが複数の時

複数の時は全てのモニタを取得します。
必要なモニタを見つけましょう!

using System.Windows.Forms;
(省略)
private void GetMonitors()
{
    foreach (Screen scr in Screen.AllScreen)
    {
        //デバイス名
        string dvnm = scr.DeviceName;
        //座標(モニタ左上)
        int x = scr.Bounds.X; //高さ
        int y = scr.Bounds.Y;  //幅
        //大きさ
        int tate = Screen.PrimaryScreen.Bounds.Height; //高さ
        int yoko = Screen.PrimaryScreen.Bounds.Width;  //幅
    }
}

【補足】フォームがどのモニタにあるのか?

モニタのサイズを取得できました。
マルチモニタの場合、どのモニタにフォームが表示されているか知りたくないですか?

Rectangleクラスを使用します。

【Rectangleクラス】は、大きさと位置の領域(エリア)情報を持ったクラスです。

この領域内にフォームの左上が所属しているか確認します。
Containを使います。

using System.Windows.Forms;
(省略)
private void GetMonitors()
{
    foreach (Screen scr in Screen.AllScreen)
    {
        if(scr.WorkingArea.Contains(this.Location) == true)
        {
            (フォームがエリア内にある)
        }
    }
}

まとめ

今回はモニタのサイズ取得方法の備忘録です。
モニタのサイズを取得するためにはScreenクラスを使います。

ちょっと色々な環境を考慮してマルチディスプレイを前提に考えています。
フォームが表示した位置がどのモニタ内にあるかを確認する事で、融通が利くようになるでしょう。

次回は、完成です。今までの内容をつなぎ合わせて、モニタに中心線を描画しましょう。

コメント

タイトルとURLをコピーしました