private void WmGetMinMaxInfo(System.IntPtr hwnd, System.IntPtr lParam) { XBDMCom.Metro.Native.Monitor_Workarea.MINMAXINFO mmi = (XBDMCom.Metro.Native.Monitor_Workarea.MINMAXINFO)Marshal.PtrToStructure(lParam, typeof(XBDMCom.Metro.Native.Monitor_Workarea.MINMAXINFO)); // Adjust the maximized size and position to fit the work area of the correct monitor int MONITOR_DEFAULTTONEAREST = 0x00000002; System.IntPtr monitor = XBDMCom.Metro.Native.Monitor_Workarea.MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); if (monitor != System.IntPtr.Zero) { System.Windows.Forms.Screen scrn = System.Windows.Forms.Screen.FromHandle(new WindowInteropHelper(this).Handle); XBDMCom.Metro.Native.Monitor_Workarea.MONITORINFO monitorInfo = new XBDMCom.Metro.Native.Monitor_Workarea.MONITORINFO(); XBDMCom.Metro.Native.Monitor_Workarea.GetMonitorInfo(monitor, monitorInfo); XBDMCom.Metro.Native.Monitor_Workarea.RECT rcWorkArea = monitorInfo.rcWork; XBDMCom.Metro.Native.Monitor_Workarea.RECT rcMonitorArea = monitorInfo.rcMonitor; mmi.ptMaxPosition.x = Math.Abs(rcWorkArea.left - rcMonitorArea.left); mmi.ptMaxPosition.y = Math.Abs(rcWorkArea.top - rcMonitorArea.top); mmi.ptMaxSize.x = Math.Abs(rcWorkArea.right - rcWorkArea.left); mmi.ptMaxSize.y = Math.Abs(rcWorkArea.bottom - rcWorkArea.top); /* * mmi.ptMaxPosition.x = Math.Abs(scrn.Bounds.Left - scrn.WorkingArea.Left); * mmi.ptMaxPosition.y = Math.Abs(scrn.Bounds.Top - scrn.WorkingArea.Top); * mmi.ptMaxSize.x = Math.Abs(scrn.Bounds.Right - scrn.WorkingArea.Left); * mmi.ptMaxSize.y = Math.Abs(scrn.Bounds.Bottom - scrn.WorkingArea.Top); */ } Marshal.StructureToPtr(mmi, lParam, true); }
private void WmGetMinMaxInfo(System.IntPtr hwnd, System.IntPtr lParam) { XBDMCom.Metro.Native.Monitor_Workarea.MINMAXINFO mmi = (XBDMCom.Metro.Native.Monitor_Workarea.MINMAXINFO)Marshal.PtrToStructure(lParam, typeof(XBDMCom.Metro.Native.Monitor_Workarea.MINMAXINFO)); // Adjust the maximized size and position to fit the work area of the correct monitor int MONITOR_DEFAULTTONEAREST = 0x00000002; System.IntPtr monitor = XBDMCom.Metro.Native.Monitor_Workarea.MonitorFromWindow(hwnd, MONITOR_DEFAULTTONEAREST); if (monitor != System.IntPtr.Zero) { System.Windows.Forms.Screen scrn = System.Windows.Forms.Screen.FromHandle(new WindowInteropHelper(this).Handle); XBDMCom.Metro.Native.Monitor_Workarea.MONITORINFO monitorInfo = new XBDMCom.Metro.Native.Monitor_Workarea.MONITORINFO(); XBDMCom.Metro.Native.Monitor_Workarea.GetMonitorInfo(monitor, monitorInfo); XBDMCom.Metro.Native.Monitor_Workarea.RECT rcWorkArea = monitorInfo.rcWork; XBDMCom.Metro.Native.Monitor_Workarea.RECT rcMonitorArea = monitorInfo.rcMonitor; mmi.ptMaxPosition.x = Math.Abs(rcWorkArea.left - rcMonitorArea.left); mmi.ptMaxPosition.y = Math.Abs(rcWorkArea.top - rcMonitorArea.top); mmi.ptMaxSize.x = Math.Abs(rcWorkArea.right - rcWorkArea.left); mmi.ptMaxSize.y = Math.Abs(rcWorkArea.bottom - rcWorkArea.top); /* mmi.ptMaxPosition.x = Math.Abs(scrn.Bounds.Left - scrn.WorkingArea.Left); mmi.ptMaxPosition.y = Math.Abs(scrn.Bounds.Top - scrn.WorkingArea.Top); mmi.ptMaxSize.x = Math.Abs(scrn.Bounds.Right - scrn.WorkingArea.Left); mmi.ptMaxSize.y = Math.Abs(scrn.Bounds.Bottom - scrn.WorkingArea.Top); */ } Marshal.StructureToPtr(mmi, lParam, true); }