protected override void WndProc(ref Message m) { if (!IsDesignMode) { switch (m.Msg) { case (int)WindowsMessages.WM_SHOWWINDOW: { if (StartPosition == FormStartPosition.CenterParent && Owner != null) { Location = new Point(Owner.Location.X + Owner.Width / 2 - Width / 2, Owner.Location.Y + Owner.Height / 2 - Height / 2); } else if (StartPosition == FormStartPosition.CenterScreen || (StartPosition == FormStartPosition.CenterParent && Owner == null)) { var currentScreen = Screen.FromHandle(this.Handle); Location = new Point(currentScreen.WorkingArea.Left + (currentScreen.WorkingArea.Width / 2 - this.Width / 2), currentScreen.WorkingArea.Top + (currentScreen.WorkingArea.Height / 2 - this.Height / 2)); } Activate(); BringToFront(); base.WndProc(ref m); } break; case (int)WindowsMessages.WM_MOVE: { browser?.BrowserHost?.NotifyScreenInfoChanged(); base.WndProc(ref m); } break; case (int)WindowsMessages.WM_SIZE: { var x = (int)User32.LoWord(m.LParam); var y = (int)User32.HiWord(m.LParam); if (browser != null && browser.IsHandleCreated) { var js = string.Format(JsHostWindowObject.JS_WINDOW_STATE_CHANGED, m.WParam, x, y); browser.ExecuteJavascript(js); } } break; default: { base.WndProc(ref m); } break; } } else { base.WndProc(ref m); } }
protected override void WndProc(ref Message m) { if (!IsDesignMode) { switch (m.Msg) { case NativeMethods.WindowsMessage.WM_SHOWWINDOW: { if (StartPosition == FormStartPosition.CenterParent && Owner != null) { Location = new Point(Owner.Location.X + Owner.Width / 2 - Width / 2, Owner.Location.Y + Owner.Height / 2 - Height / 2); } else if (StartPosition == FormStartPosition.CenterScreen || (StartPosition == FormStartPosition.CenterParent && Owner == null)) { var currentScreen = Screen.FromHandle(this.Handle); Location = new Point(currentScreen.WorkingArea.Left + (currentScreen.WorkingArea.Width / 2 - this.Width / 2), currentScreen.WorkingArea.Top + (currentScreen.WorkingArea.Height / 2 - this.Height / 2)); } Activate(); BringToFront(); base.WndProc(ref m); } break; case NativeMethods.WindowsMessage.WM_NCHITTEST: { if (m.Result == NativeMethods.FALSE && Resizable) { Point p = PointToClient(new Point(NativeMethods.LoWord(m.LParam.ToInt32()), NativeMethods.HiWord(m.LParam.ToInt32()))); var hit = GetDirection(p.X, p.Y); SetResizeMethod(hit); m.Result = (IntPtr)hit; } else { base.WndProc(ref m); } } break; case NativeMethods.WindowsMessage.WM_SIZE: { var msg = m.WParam.ToInt32(); if (msg == 0 && fullClientModePadding.HasValue) { Padding = fullClientModePadding.Value; fullClientModePadding = null; } else if (msg == 2) { if (fullClientModePadding == null) { fullClientModePadding = Padding; } Padding = maxPadding; } if (browser != null && browser.IsHandleCreated) { var x = NativeMethods.LoWord(m.LParam.ToInt32()); var y = NativeMethods.HiWord(m.LParam.ToInt32()); var js = string.Format(JS_WINDOW_STATE_CHANGED, m.WParam, x, y); browser.ExecuteJavascript(js); } base.WndProc(ref m); } break; case NativeMethods.WindowsMessage.WM_SYSCOMMAND: { var msg = m.WParam.ToInt32(); if (msg == NativeMethods.SysCommand.SC_MINIMIZE || msg == NativeMethods.SysCommand.SC_MAXIMIZE) { if (WindowState != FormWindowState.Minimized && WindowState != FormWindowState.Maximized) { windowOriginalSize = ClientSize; } } base.WndProc(ref m); } break; default: { if (IsNonclientMode) { NonclientModeWndProc(ref m); } else { DwmModeWndProc(ref m); } } break; } } else { base.WndProc(ref m); } }