質問は簡単です。単一のフォームを接続されたすべての画面に拡張する方法はありますか?
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 に答える