Я пытался имитировать Windows 7 Snipping Tool, чтобы он перекрывал экран полупрозрачным серым слоем, который становится полностью прозрачным внутри области выделения. Я подошел довольно близко. Я отображаю непрозрачную серую форму без полей 50%, которая покрывает весь экран и имеет прозрачный ключ цвета фуксии. Затем поверх этой формы я рисую 2 прямоугольника. Сплошной цвет фуксии для прозрачности и еще один прямоугольник для красной рамки. Это работает, но только если я делаю одну из трех вещей, ни одна из которых не является опцией.
- Отключить двойную буферизацию, которая заставляет форму мерцать при рисовании
- Изменить цветовой режим рабочего стола на 16 бит с 32 бит
- Сделать форму 100% непрозрачной
Вот мой код. Любое предложение о том, как заставить это работать?
public partial class frmBackground : Form
{
Rectangle rect;
public frmBackground()
{
InitializeComponent();
this.MouseDown += new MouseEventHandler(frmBackground_MouseDown);
this.MouseMove += new MouseEventHandler(frmBackground_MouseMove);
this.Paint += new PaintEventHandler(frmBackground_Paint);
this.DoubleBuffered = true;
this.Cursor = Cursors.Cross;
}
private void frmBackground_MouseDown(object sender, MouseEventArgs e)
{
Bitmap backBuffer = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
rect = new Rectangle(e.X, e.Y, 0, 0);
this.Invalidate();
}
private void frmBackground_MouseMove(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left)
rect = new Rectangle(rect.Left, rect.Top, e.X - rect.Left, e.Y - rect.Top);
this.Invalidate();
}
private void frmBackground_Paint(object sender, PaintEventArgs e)
{
Pen pen = new Pen(Color.Red, 3);
e.Graphics.DrawRectangle(pen, rect);
SolidBrush brush = new SolidBrush(Color.Fuchsia);
e.Graphics.FillRectangle(brush, rect);
}
}