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
が異なる数値を報告している理由。