Simple screen area picker for WinForms apps.
// this is the calling form
// will hide/show automatically
MouseForm.Show(this, region => {
// work with Rectangle region...
});| using System; | |
| using System.Drawing; | |
| using System.Windows.Forms; | |
| namespace Common | |
| { | |
| public class MouseForm : Form | |
| { | |
| bool down; | |
| Point start; | |
| Rectangle region; | |
| readonly Pen pen; | |
| Action<Rectangle> callback; | |
| public MouseForm() | |
| { | |
| Opacity = 0.25; | |
| TopMost = true; | |
| Cursor = Cursors.Cross; | |
| this.BackColor = Color.White; | |
| Bounds = Screen.PrimaryScreen.Bounds; | |
| FormBorderStyle = FormBorderStyle.None; | |
| WindowState = FormWindowState.Maximized; | |
| StartPosition = FormStartPosition.Manual; | |
| region = Rectangle.Empty; | |
| pen = new Pen(Color.Red, 2); | |
| Shown += MouseForm_Shown; | |
| FormClosed += MouseForm_FormClosed; | |
| MouseDown += MouseForm_MouseDown; | |
| MouseMove += MouseForm_MouseMove; | |
| MouseUp += MouseForm_MouseUp; | |
| Paint += MouseForm_Paint; | |
| } | |
| void MouseForm_Shown(object sender, EventArgs e) | |
| { | |
| Owner.Hide(); | |
| } | |
| void MouseForm_FormClosed(object sender, FormClosedEventArgs e) | |
| { | |
| Owner.Show(); | |
| } | |
| void MouseForm_MouseDown(object sender, MouseEventArgs e) | |
| { | |
| down = true; | |
| start = e.Location; | |
| } | |
| void MouseForm_MouseMove(object sender, MouseEventArgs e) | |
| { | |
| if (!down) | |
| return; | |
| region.X = Math.Min(e.X, start.X); | |
| region.Y = Math.Min(e.Y, start.Y); | |
| region.Width = Math.Abs(e.X - start.X); | |
| region.Height = Math.Abs(e.Y - start.Y); | |
| Refresh(); | |
| } | |
| void MouseForm_MouseUp(object sender, MouseEventArgs e) | |
| { | |
| down = false; | |
| callback(region); | |
| Close(); | |
| } | |
| void MouseForm_Paint(object sender, PaintEventArgs e) | |
| { | |
| e.Graphics.DrawRectangle(pen, region); | |
| } | |
| public static void Show(Form owner, Action<Rectangle> callback) | |
| { | |
| var form = new MouseForm(); | |
| form.callback = callback; | |
| form.Show(owner); | |
| } | |
| } | |
| } |