c# - 如何获取所有显示器联合中的矩形,该区域不包含在显示器区域中
问题描述
我有一个多显示器设置,我为我的程序的游戏区域制作了一个大窗口,我想放置充当墙壁的矩形,因此玩家无法进入例如超出范围的窗口部分这里的红色部分:
我有适用于这种特殊情况的代码,但在这种情况下:
它不起作用(当屏幕的 X/Y 大于其他显示器的,并且宽度/高度小于其他显示器时。
可能有一些聪明的数学可以让这变得非常容易,但我想不出任何聪明的方法来做到这一点。
适用于第一部分的代码是:
for (int i = 0; i < Screen.AllScreens.Length; i++)
{
for (int j = 0; j < Screen.AllScreens.Length; j++)
{
if (i == j)
{
continue;
}
if (Screen.AllScreens[j].Bounds.X == Screen.AllScreens[i].Bounds.Width)
{
outOfBoundRekts.Add(new Rectangle(Screen.AllScreens[j].Bounds.X, Screen.AllScreens[i].Bounds.Y, Screen.AllScreens[j].Bounds.Width, Screen.AllScreens[j].Bounds.Y));
if (Screen.AllScreens[i].Bounds.Height < Screen.AllScreens[j].Bounds.Y + Screen.AllScreens[j].Bounds.Height)
{
outOfBoundRekts.Add(new Rectangle(Screen.AllScreens[i].Bounds.X, Screen.AllScreens[i].Bounds.Height, Screen.AllScreens[j].Bounds.X, Screen.AllScreens[j].Bounds.Y));
}
}
if (Screen.AllScreens[j].Bounds.Y == Screen.AllScreens[i].Bounds.Height)
{
outOfBoundRekts.Add(new Rectangle(Screen.AllScreens[i].Bounds.X, Screen.AllScreens[i].Bounds.Height, Screen.AllScreens[j].Bounds.X, Screen.AllScreens[j].Bounds.Height));
if (Screen.AllScreens[i].Bounds.Width < Screen.AllScreens[j].Bounds.X + Screen.AllScreens[j].Bounds.Width)
{
outOfBoundRekts.Add(new Rectangle(Screen.AllScreens[j].Bounds.X, Screen.AllScreens[i].Bounds.Y, Screen.AllScreens[j].Bounds.Width, Screen.AllScreens[j].Bounds.Y));
}
}
Console.WriteLine();
}
}
因为我以第一种方式使用我的显示器,所以现在它会很好,但我希望我的代码灵活,我很好奇这个问题有什么解决方案。
解决方案
推荐阅读
- apache-spark - Cassandra 仅在二级索引上加入
- c# - 如何将上下文菜单绑定到 WPF 中的列表框项的按钮
- c# - 无法嵌入 C++/CLR 程序集版本号
- debugging - Pharo SubscriptOutOfBounds:5 错误
- c# - 如何识别哪个登录帐户调用了我的 ASP.Net 页面?
- search - 如何模糊搜索单个 sqlite3 字段
- android - 当最小化游戏、进入主屏幕然后返回游戏时,是什么导致 libgdx 中的纹理损坏?
- r - 提高在大型矩阵中计算加权 Jaccard 的性能
- go - 解组一个字符串化的 json
- javascript - 使用纯javascript将文本文件异步加载到字符串中