首页 > 解决方案 > 如何获取所有显示器联合中的矩形,该区域不包含在显示器区域中

问题描述

我有一个多显示器设置,我为我的程序的游戏区域制作了一个大窗口,我想放置充当墙壁的矩形,因此玩家无法进入例如超出范围的窗口部分这里的红色部分:

我想要的矩形面积

我有适用于这种特殊情况的代码,但在这种情况下:

在此处输入图像描述

它不起作用(当屏幕的 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();
            }
        }

因为我以第一种方式使用我的显示器,所以现在它会很好,但我希望我的代码灵活,我很好奇这个问题有什么解决方案。

标签: c#winformsfullscreenmultiple-monitors

解决方案


推荐阅读