Skip to content

Instantly share code, notes, and snippets.

@bryanjhv
Last active September 24, 2019 07:28
Show Gist options
  • Save bryanjhv/64967c0a9d570271eda1f9d4f76b42a4 to your computer and use it in GitHub Desktop.
Save bryanjhv/64967c0a9d570271eda1f9d4f76b42a4 to your computer and use it in GitHub Desktop.
Simple screen area picker for WinForms apps.

MouseForm.cs

Simple screen area picker for WinForms apps.

Usage

// 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);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment