// Return True if a certain percent of a rectangle is shown across the total screen area of all monitors, otherwise return False.
public bool IsOnScreen(System.Drawing.Point RecLocation, System.Drawing.Size RecSize, double MinPercentOnScreen = 0.2)
{
double PixelsVisible = 0;
System.Drawing.Rectangle Rec = new System.Drawing.Rectangle(RecLocation, RecSize);
foreach (Screen Scrn in Screen.AllScreens)
{
System.Drawing.Rectangle r = System.Drawing.Rectangle.Intersect(Rec, Scrn.WorkingArea);
// intersect rectangle with screen
if (r.Width != 0 & r.Height != 0)
{
PixelsVisible += (r.Width * r.Height);
// tally visible pixels
}
}
return PixelsVisible >= (Rec.Width * Rec.Height) * MinPercentOnScreen;
}
8条答案
按热度按时间fumotvh31#
使用此函数检查Form是否完全显示在屏幕上:
字符串
如果在屏幕上,则只检查左上角点:
型
tpxzln5u2#
将上述所有解决方案与“IntersectsWith”方法和LINQ扩展相结合给予简而言之:
字符串
lymnna713#
完整的解决方案(基于所有答案)。我添加了一个参数
MinPercentOnScreen
,其中至少该%的像素必须在所有屏幕/显示器上可见。因此,如果返回false
,则需要将窗口的位置移回默认值。字符串
实施情况:
型
kqlmhetl4#
旧的线程,但仍然有帮助!Cody和Andrija-感谢代码。我做了一些小的调整:represent. println();我使用formRectangle.Intersect(screen.WorkingArea);因为Intersect()用交集替换其对象。如果窗体完全不在屏幕上,则交集后的formRectangle为(0,0,0,0),Contains()返回true。因此,我还检查formRectangle Top、Left、Width和Height在返回true之前是否不全为0。现在,如果窗体的任何部分在屏幕上,则代码返回true,如果没有任何部分在屏幕上,则返回false。
bxpogfeg5#
对于WPF(基于Matthias Loerkes的答案)
添加对 * System.Windows.Forms * 和 * System.Drawing * 的引用。
字符串
qeeaahzv6#
如果显示器碰巧关闭,这些都不起作用。Screen.AllScreens函数将始终返回屏幕的数量,即使其中一个被关闭。
vi4fp9gy7#
在定位窗口之前,请检查屏幕分辨率。这将允许您在实际执行之前,确定是否要将其放置在分辨率范围之外的位置。
ttvkxqim8#
使用
DesktopBounds
的一行程序解决方案:字符串