/// <summary> /// Finds the maximum single monitor rectangle. /// </summary> /// <param name="windowRect">The window rect.</param> /// <param name="screenSubRect">The screen sub rect.</param> /// <param name="monitorRect">The monitor rect.</param> public static void FindMaximumSingleMonitorRectangle(RECT windowRect, out RECT screenSubRect, out RECT monitorRect) { List<RECT> rects = new List<RECT>(); NativeMethodsPack.NativeMethods.EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, delegate(IntPtr hMonitor, IntPtr hdcMonitor, ref RECT rect, IntPtr lpData) { MONITORINFO monitorInfo = new MONITORINFO { cbSize = (uint)Marshal.SizeOf(typeof(MONITORINFO)) }; NativeMethodsPack.NativeMethods.GetMonitorInfo(hMonitor, ref monitorInfo); rects.Add(monitorInfo.rcWork); return true; }, IntPtr.Zero); screenSubRect = new RECT { Left = 0, Right = 0, Top = 0, Bottom = 0 }; monitorRect = new RECT { Left = 0, Right = 0, Top = 0, Bottom = 0 }; long num = 0L; foreach (RECT rect in rects) { RECT lprcDst; RECT lprcSrc1 = rect; NativeMethodsPack.NativeMethods.IntersectRect(out lprcDst, ref lprcSrc1, ref windowRect); long num2 = lprcDst.Width * lprcDst.Height; if (num2 > num) { screenSubRect = lprcDst; monitorRect = rect; num = num2; } } }
public static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect);
public static extern bool IntersectRect(out RECT lprcDst, ref RECT lprcSrc1, ref RECT lprcSrc2);
public static extern bool FillRect(IntPtr hDC, ref RECT rect, IntPtr hbrush);
public static extern bool AdjustWindowRectEx(ref RECT lpRect, uint dwStyle, bool bMenu, uint dwExStyle);
public static extern bool PtInRect(ref RECT lprc, POINT pt);
public static extern Boolean AdjustWindowRect(ref RECT lpRect, UInt32 dwStyle, bool bMenu);
public static extern bool GetWindowRect(HandleRef hwnd, out RECT lpRect);
public static extern bool GetClientRect(IntPtr hWnd, out RECT lpRect);
public static extern IntPtr CreateRectRgnIndirect(ref RECT lprc);