public static extern int DwmExtendFrameIntoClientArea(IntPtr hWnd, ref MARGINS pMarInset);
protected override void WndProc(ref Message m) { base.WndProc(ref m); switch (m.Msg) { case Constants.WM_NCCALCSIZE: if (Utilities.AeroEnabled) { int value = 2; Utilities.DwmSetWindowAttribute(Handle, 2, ref value, 4); MARGINS margins = new MARGINS() { leftWidth = 1, topHeight = 1, rightWidth = 1, bottomHeight = 1 }; Utilities.DwmExtendFrameIntoClientArea(Handle, ref margins); if (!DesignMode) if (m.WParam.Equals(IntPtr.Zero)) { RECT structrect = (RECT)m.GetLParam(typeof(RECT)); Rectangle normalrect = structrect.ToRectangle(); normalrect.Inflate(Constants.AeroExtraBorder, Constants.AeroExtraBorder); Marshal.StructureToPtr(new RECT(normalrect), m.LParam, true); } else { NCCALCSIZE_PARAMS csp = (NCCALCSIZE_PARAMS)m.GetLParam(typeof(NCCALCSIZE_PARAMS)); Rectangle normalrect = csp.rgrc0.ToRectangle(); normalrect.Inflate(Constants.AeroExtraBorder, Constants.AeroExtraBorder); csp.rgrc0 = new RECT(normalrect); Marshal.StructureToPtr(csp, m.LParam, true); } m.Result = IntPtr.Zero; } break; case Constants.WM_NCLBUTTONDOWN: OnNonClientLButtonDown(m.LParam); break; case Constants.WM_NCLBUTTONUP: OnNonClientLButtonUp(m.LParam); break; case Constants.WM_NCRBUTTONUP: OnNonClientRButtonUp(m.LParam); break; case Constants.WM_NCLBUTTONDBLCLK: OnNonClientDoubleClick(m.LParam); break; case Constants.WM_NCACTIVATE: formActive = m.WParam.ToInt32() != 0; Invalidate(true); break; case Constants.WM_NCHITTEST: m.Result = NonClientHitTest(m.LParam); break; case Constants.WM_NCMOUSEMOVE: Invalidate(true); break; case Constants.WM_NCMOUSELEAVE: foreach (Button button in buttons) button.Hovered = Button.ButtonHoverState.None; Invalidate(true); break; case Constants.WM_MOVE: Rectangle bounds = Screen.GetWorkingArea(this); bounds.Location = Point.Empty; MaximizedBounds = bounds; break; case Constants.WM_SIZE: if (m.WParam.ToInt32() == 2) { if (MaximumSize != Screen.GetWorkingArea(this).Size) { sendMessage(Constants.WM_SYSCOMMAND, (IntPtr)Constants.SpecialCommands.SC_RESTORE, IntPtr.Zero); MaximumSize = Screen.GetWorkingArea(this).Size; sendMessage(Constants.WM_SYSCOMMAND, (IntPtr)Constants.SpecialCommands.SC_MAXIMIZE, IntPtr.Zero); } } else if (MaximumSize == Screen.GetWorkingArea(this).Size) { MaximumSize = Size.Empty; } break; } }