private void Form1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) { ClosePress = CloseButton.IsVisible(e.X, e.Y) && e.Button == MouseButtons.Left; MinPress = MinButton.IsVisible(e.X, e.Y) && e.Button == MouseButtons.Left; FormDrag = TitleBar.IsVisible(e.X, e.Y) && e.Button == MouseButtons.Left && ClosePress == false && MinPress == false; if (FormDrag) { this.Capture = false; Message msg = Message.Create(Handle, WM_NCLBUTTONDOWN, (IntPtr)HT_CAPTION, IntPtr.Zero); WndProc(ref msg); } Invalidate(); }
private void Form1_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e) { bool OverClose, OverMin; OverClose = CloseButton.IsVisible(e.X, e.Y); OverMin = MinButton.IsVisible(e.X, e.Y); if (OverClose && ClosePress && e.Button == MouseButtons.Left) { this.Close(); } if (OverMin && MinPress && e.Button == MouseButtons.Left) { this.WindowState = FormWindowState.Minimized; } if (e.Button == MouseButtons.Right && TitleBar.IsVisible(e.X, e.Y)) { if (OverClose == false && OverMin == false) { const int WM_GETSYSMENU = 0x313; if (e.Button == MouseButtons.Right) { Point pos = this.PointToScreen(new Point(e.X, e.Y)); IntPtr hPos = (IntPtr)((int)((pos.Y * 0x10000) | (pos.X & 0xFFFF))); Message msg = Message.Create(this.Handle, WM_GETSYSMENU, IntPtr.Zero, hPos); WndProc(ref msg); } } } ClosePress = false; MinPress = false; FormDrag = false; Invalidate(); }