我正在尝试编写一个程序,Screen
Bounds
如果一个窗口跨越多个屏幕,则窗口将“捕捉”到窗口面积最大的最近边缘Screen
。
[DllImport("user32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool GetWindowRect(IntPtr hWnd, ref Rectangle lpRect);
Rectangle rct = new Rectangle();
GetWindowRect(hwnd, ref rct);
if (rct.IntersectsWith(Screen.AllScreens[0].Bounds))
{
Rectangle hwndinterwithscreen = Rectangle.Intersect(rct, Screen.AllScreens[0].Bounds);
MessageBox.Show("hwnd: " + hwnd.ToInt32().ToString() + " intersects with: " + Screen.AllScreens[0].DeviceName + " at: " + hwndinterwithscreen.Location + " that is this big: " + hwndinterwithscreen.Size);
}
}
有了上面,我看到了非常奇怪的结果:1)如果顶部消息栏的中心被移开Screen.AllScreens[0]
,但仍然与 重叠Screen.AllScreens[0]
,则不输入条件。2)hwndinterwithscreen.Size
每次移动窗口时都会发生变化,并且似乎是计算中考虑的最近Screen.AllScreens[0]
边界hwndinterwithscreen
。
除非我误解了System.Drawing.Rectangle.Intersect()上非常清晰的文档,否则有些异常。
为什么hwndinterwithscreen.Size
报告不同的数字。