public void SetInitialWindowPlacement() { try { if (this.Configuration == null || !this.Configuration.HasProperty("Left") || !this.Configuration.HasProperty("Width") || !this.Configuration.HasProperty("Top") || !this.Configuration.HasProperty("Height") || !this.Configuration.HasProperty("WindowState")) { UnsafeNativeMethods.WINDOWPLACEMENT top = new UnsafeNativeMethods.WINDOWPLACEMENT() { Length = Marshal.SizeOf(typeof(UnsafeNativeMethods.WINDOWPLACEMENT)) }; if (UnsafeNativeMethods.GetWindowPlacement((new WindowInteropHelper(this)).Handle, out top)) { UnsafeNativeMethods.RECT rECT = new UnsafeNativeMethods.RECT(); if (UnsafeNativeMethods.SystemParametersInfo(48, 0, ref rECT, 0)) { if (top.NormalPosition.Top < rECT.Top) { top.NormalPosition.Top = rECT.Top; } if (top.NormalPosition.Left < rECT.Left) { top.NormalPosition.Left = rECT.Left; } if (top.NormalPosition.Bottom > rECT.Bottom) { top.NormalPosition.Bottom = rECT.Bottom; } if (top.NormalPosition.Right > rECT.Right) { top.NormalPosition.Right = rECT.Right; } if (top.NormalPosition.Left > top.NormalPosition.Right) { top.NormalPosition.Left = rECT.Left; } if (top.NormalPosition.Top > top.NormalPosition.Bottom) { top.NormalPosition.Top = rECT.Top; } top.ShowCmd = 3; this.SetWindowPlacement(ref top); } } } else { double property = (double)this.Configuration.GetProperty("Left"); double num = (double)this.Configuration.GetProperty("Top"); double property1 = (double)this.Configuration.GetProperty("Width"); double num1 = (double)this.Configuration.GetProperty("Height"); WindowState windowState = (WindowState)this.Configuration.GetProperty("WindowState"); Point device = WindowHelper.TransformToDevice(this, new Point(property, num)); Point point = WindowHelper.TransformToDevice(this, new Point(property + property1, num + num1)); UnsafeNativeMethods.WINDOWPLACEMENT x = new UnsafeNativeMethods.WINDOWPLACEMENT() { Length = Marshal.SizeOf(typeof(UnsafeNativeMethods.WINDOWPLACEMENT)), Flags = 0 }; x.MaxPosition.X = -1; x.MaxPosition.Y = -1; x.MinPosition.X = -1; x.MinPosition.Y = -1; x.NormalPosition.Left = (int)device.X; x.NormalPosition.Top = (int)device.Y; x.NormalPosition.Right = (int)point.X; x.NormalPosition.Bottom = (int)point.Y; if (windowState != WindowState.Maximized) { x.ShowCmd = 1; } else { x.ShowCmd = 3; } this.SetWindowPlacement(ref x); } if (this.FeedbackService != null) { this.FeedbackService.SetData(37, (int)base.ActualWidth); this.FeedbackService.SetData(38, (int)base.ActualHeight); } } catch { } }
public static extern bool SystemParametersInfo(int nAction, int nParam, ref UnsafeNativeMethods.RECT rc, int nUpdate);