Screen
Bounds
을 고려한 프로그램을 작성하려고하고 있는데, 창이 여러 화면에 걸쳐있는 경우 창이 가장 가까운 가장자리에 "스냅"됩니다. . 윈도우에서 가장 면적이 Screen
예상치 못한 .Size를보고하지 않는 교차 (250x250) 교차점입니다.
[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
은 창을 이동할 때마다 변경되며 hwndinterwithscreen
계산에서 가장 가까운 경계 인 Screen.AllScreens[0]
을 고려한 것으로 보입니다.
매우 명확한 문서 인 System.Drawing.Rectangle.Intersect()을 오해하고있는 경우를 제외하고는 이상한 점이 있습니다.
왜 hwndinterwithscreen.Size
은 다른 번호를보고하고 있습니까?
GetWindowRect() : 당신은 정적 메소드
Screen.FromControl
를 사용하여 시도 할 수 있습니다. 어떤 정의가 다른가. –