private void WmNCLButtonDown(ref Message msg) { Point pt = this.PointToWindow(new Point(msg.LParam.ToInt32())); NonClientMouseEventArgs args = new NonClientMouseEventArgs( MouseButtons.Left, 1, pt.X, pt.Y, 0, msg.WParam.ToInt32()); OnNonClientMouseDown(args); if (!args.Handled) { DefWndProc(ref msg); } msg.Result = NativeMethods.TRUE; }
protected override void OnNonClientMouseDown(NonClientMouseEventArgs args) { if (args.Button != MouseButtons.Left) return; switch (args.HitTest) { case (int)NativeMethods.NCHITTEST.HTCLOSE: { //NativeMethods.POINT pt = NativeMethods.POINT.FromPoint(args.Location); if (DepressButton(closeButton)) NativeMethods.SendMessage(this.Handle, (int)NativeMethods.WindowMessages.WM_SYSCOMMAND, (IntPtr)NativeMethods.SystemCommands.SC_CLOSE, IntPtr.Zero); args.Handled = true; break; } case (int)NativeMethods.NCHITTEST.HTMINBUTTON: { // NativeMethods.POINT pt = NativeMethods.POINT.FromPoint(args.Location); if (DepressButton(minimizeButton)) NativeMethods.SendMessage(this.Handle, (int)NativeMethods.WindowMessages.WM_SYSCOMMAND, (IntPtr)NativeMethods.SystemCommands.SC_MINIMIZE, IntPtr.Zero); args.Handled = true; break; } case (int)NativeMethods.NCHITTEST.HTMAXBUTTON: { if (DepressButton(maximizeButton)) { int sc = (WindowState == FormWindowState.Maximized)? (int)NativeMethods.SystemCommands.SC_RESTORE : (int)NativeMethods.SystemCommands.SC_MAXIMIZE; NativeMethods.SendMessage(this.Handle, (int)NativeMethods.WindowMessages.WM_SYSCOMMAND, (IntPtr)sc, IntPtr.Zero); } args.Handled = true; break; } } //TODO: handle other buttons if exist }
/// <summary> /// Called each time one of the mouse buttons was pressed over the non-client area. /// </summary> /// <param name="args">NonClientMouseEventArgs contain mouse position, button pressed, /// and hit-test code for current position. </param> protected virtual void OnNonClientMouseDown(NonClientMouseEventArgs args) { }
protected override void OnNonClientMouseDown(NonClientMouseEventArgs args) { if (args.Button != MouseButtons.Left) { return; } switch (args.HitTest) { case (int)NativeMethods.NCHITTEST.HTCLOSE: { //NativeMethods.POINT pt = NativeMethods.POINT.FromPoint(args.Location); if (DepressButton(closeButton)) { NativeMethods.SendMessage(this.Handle, (int)NativeMethods.WindowMessages.WM_SYSCOMMAND, (IntPtr)NativeMethods.SystemCommands.SC_CLOSE, IntPtr.Zero); } args.Handled = true; break; } case (int)NativeMethods.NCHITTEST.HTMINBUTTON: { // NativeMethods.POINT pt = NativeMethods.POINT.FromPoint(args.Location); if (DepressButton(minimizeButton)) { NativeMethods.SendMessage(this.Handle, (int)NativeMethods.WindowMessages.WM_SYSCOMMAND, (IntPtr)NativeMethods.SystemCommands.SC_MINIMIZE, IntPtr.Zero); } args.Handled = true; break; } case (int)NativeMethods.NCHITTEST.HTMAXBUTTON: { if (DepressButton(maximizeButton)) { int sc = (WindowState == FormWindowState.Maximized)? (int)NativeMethods.SystemCommands.SC_RESTORE : (int)NativeMethods.SystemCommands.SC_MAXIMIZE; NativeMethods.SendMessage(this.Handle, (int)NativeMethods.WindowMessages.WM_SYSCOMMAND, (IntPtr)sc, IntPtr.Zero); } args.Handled = true; break; } case (int)NativeMethods.NCHITTEST.HTHELP: { if (DepressButton(helpButton)) { Type type = this.GetType(); if (type != null) { MethodInfo methodInfo = type.GetMethod("toggleMenu"); methodInfo.Invoke(this, new object[] {}); } } args.Handled = true; break; } } //TODO: handle other buttons if exist }