0

質問は簡単です。単一のフォームを接続されたすべての画面に拡張する方法はありますか?

4

2 に答える 2

1

いいえ、C などのかなり低レベルの言語でコーディングし、グラフィックス メモリへのアクセスを取得する場合を除きます。

一般に、レイアウトを実行するのはオペレーティング システムなので、低レベルのアクセス権がないか、ベンダーが API を公開していない限り、かなり難しいと思います。

于 2010-09-28T19:52:32.807 に答える
0

はい、すべての画面が、フォームを配置できる巨大な仮想面を構成します。フォームの位置をこのサーフェスの左上に設定し、そのサイズをこのサーフェスのサイズに設定するだけです。

次のコードを使用して、このサーフェスの範囲を見つけることができます。

private static Rectangle GetVirtualDisplayBounds()
{
    Screen[] allScreens = Screen.AllScreens;

    Point topLeft = allScreens[0].Bounds.Location;
    Point bottomRight = topLeft + allScreens[0].Bounds.Size;

    foreach (Screen screen in allScreens.Skip(1))
    {
        topLeft = new Point(Math.Min(topLeft.X, screen.Bounds.X),
                            Math.Min(topLeft.Y, screen.Bounds.Y));

        bottomRight = new Point(Math.Max(bottomRight.X, screen.Bounds.Right),
                                Math.Max(bottomRight.Y, screen.Bounds.Bottom));
    }

    return new Rectangle(topLeft.X, topLeft.Y, bottomRight.X - topLeft.X, bottomRight.Y - topLeft.Y);
}

次に、フォームのサイズを適切に設定できます。

var bounds = GetVirtualDisplayBounds();
form.Location = bounds.Location;
form.Size = bounds.Size;

フォームの境界線を無効にすることもできます:

form.FormBorderStyle = FormBorderStyle.None;

ただし、フォームを表示すると、0,0 の位置に戻ることに気付きました。つまり、このポイントの上または左にモニターを配置すると、それらはカバーされません。これを解決するには、フォームが表示された後に場所を設定する必要があります。

于 2015-10-13T16:39:13.170 に答える