public void Draw(Pair <VirtualDesktop, HMONITOR> key) { ObservableCollection <DesktopWindow> windows = Windows[key]; KeyValuePair <Pair <VirtualDesktop, HMONITOR>, ObservableCollection <DesktopWindow> > desktopMonitor = new KeyValuePair <Pair <VirtualDesktop, HMONITOR>, ObservableCollection <DesktopWindow> >(key, windows); float ScreenScalingFactorVert; int mX, mY; IEnumerable <Rectangle> gridGenerator; DrawMonitor(desktopMonitor, out ScreenScalingFactorVert, out mX, out mY, out gridGenerator); HDWP hDWP1 = User32.BeginDeferWindowPos(windows.Count); foreach (var w in desktopMonitor.Value.Select((value, i) => new Tuple <int, DesktopWindow>(i, value))) { Rectangle adjustedSize = new Rectangle( gridGenerator.ToArray()[w.Item1].X, gridGenerator.ToArray()[w.Item1].Y, gridGenerator.ToArray()[w.Item1].Width, gridGenerator.ToArray()[w.Item1].Height ); User32.ShowWindow(w.Item2.Window, ShowWindowCommand.SW_RESTORE); DrawWindow1(ScreenScalingFactorVert, mX, mY, adjustedSize, w, hDWP1); } User32.EndDeferWindowPos(hDWP1.DangerousGetHandle()); HDWP hDWP2 = User32.BeginDeferWindowPos(windows.Count); foreach (var w in desktopMonitor.Value.Select((value, i) => new Tuple <int, DesktopWindow>(i, value))) { Rectangle adjustedSize = new Rectangle( gridGenerator.ToArray()[w.Item1].X, gridGenerator.ToArray()[w.Item1].Y, gridGenerator.ToArray()[w.Item1].Width, gridGenerator.ToArray()[w.Item1].Height ); DrawWindow2(ScreenScalingFactorVert, mX, mY, adjustedSize, w, hDWP2); } User32.EndDeferWindowPos(hDWP2.DangerousGetHandle()); foreach (var w in desktopMonitor.Value.Select((value, i) => new Tuple <int, DesktopWindow>(i, value))) { w.Item2.GetWindowInfo(); } }
public void Draw() { foreach (var desktopMonitor in Windows) { float ScreenScalingFactorVert; int mX, mY; IEnumerable <Rectangle> gridGenerator; DrawMonitor(desktopMonitor, out ScreenScalingFactorVert, out mX, out mY, out gridGenerator); HDWP hDWP1 = User32.BeginDeferWindowPos(Windows.Count); foreach (var w in desktopMonitor.Value.Select((value, i) => new Tuple <int, DesktopWindow>(i, value))) { Rectangle adjustedSize = new Rectangle( gridGenerator.ToArray()[w.Item1].X, gridGenerator.ToArray()[w.Item1].Y, gridGenerator.ToArray()[w.Item1].Width, gridGenerator.ToArray()[w.Item1].Height ); User32.ShowWindow(w.Item2.Window, ShowWindowCommand.SW_RESTORE); DrawWindow1(ScreenScalingFactorVert, mX, mY, adjustedSize, w, hDWP1); } User32.EndDeferWindowPos(hDWP1.DangerousGetHandle()); HDWP hDWP2 = User32.BeginDeferWindowPos(Windows.Count); foreach (var w in desktopMonitor.Value.Select((value, i) => new Tuple <int, DesktopWindow>(i, value))) { Rectangle adjustedSize = new Rectangle( gridGenerator.ToArray()[w.Item1].X, gridGenerator.ToArray()[w.Item1].Y, gridGenerator.ToArray()[w.Item1].Width, gridGenerator.ToArray()[w.Item1].Height ); DrawWindow2(ScreenScalingFactorVert, mX, mY, adjustedSize, w, hDWP2); } User32.EndDeferWindowPos(hDWP2.DangerousGetHandle()); foreach (var w in desktopMonitor.Value.Select((value, i) => new Tuple <int, DesktopWindow>(i, value))) { w.Item2.GetWindowInfo(); } } }
private void DrawWindow1(float ScreenScalingFactorVert, int mX, int mY, Rectangle adjustedSize, Tuple <int, DesktopWindow> w, HDWP hDWP) { User32.DeferWindowPos( hDWP, w.Item2.Window, HWND.HWND_NOTOPMOST, adjustedSize.X + mX - w.Item2.Borders.left + Padding, adjustedSize.Y + mY - w.Item2.Borders.top + Padding, 100, 100, User32.SetWindowPosFlags.SWP_FRAMECHANGED | User32.SetWindowPosFlags.SWP_NOACTIVATE | User32.SetWindowPosFlags.SWP_NOCOPYBITS | User32.SetWindowPosFlags.SWP_NOZORDER | User32.SetWindowPosFlags.SWP_NOOWNERZORDER | User32.SetWindowPosFlags.SWP_NOSIZE ); }
private void DrawWindow2(float ScreenScalingFactorVert, int mX, int mY, Rectangle adjustedSize, Tuple <int, DesktopWindow> w, HDWP hDWP) { User32.DeferWindowPos( hDWP, w.Item2.Window, HWND.HWND_NOTOPMOST, 100, 100, adjustedSize.Width + w.Item2.Borders.left + w.Item2.Borders.right - 2 * Padding, adjustedSize.Height + w.Item2.Borders.top + w.Item2.Borders.bottom - 2 * Padding, User32.SetWindowPosFlags.SWP_FRAMECHANGED | User32.SetWindowPosFlags.SWP_NOACTIVATE | User32.SetWindowPosFlags.SWP_NOCOPYBITS | User32.SetWindowPosFlags.SWP_NOZORDER | User32.SetWindowPosFlags.SWP_NOOWNERZORDER | User32.SetWindowPosFlags.SWP_NOMOVE ); }
void SetRect([In, Out] ref HDWP phdwp, [In] RECT rcBrowser);