Exemple #1
0
 public static extern int DwmExtendFrameIntoClientArea(IntPtr hWnd, ref MARGINS pMarInset);
Exemple #2
0
        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;
            }
        }