publicpartialclassFullScreenForm : Form {privateRectangle rectSelected=Rectangle.Empty;privateboolisClipping=false;privateBitmap screen;privateBitmap coverLayer=null;privateColor coverColor;privateBrush rectBrush=null;privateBitmap resultBmp=null;publicFullScreenForm(Bitmap screen) {
InitializeComponent();intwidth=Screen.PrimaryScreen.Bounds.Width;intheight=Screen.PrimaryScreen.Bounds.Height;
coverLayer=newBitmap(width, height);
coverColor=Color.FromArgb(50,200,0,0);
rectBrush=newSolidBrush(coverColor);using(Graphics g=Graphics.FromImage(coverLayer)) {
g.Clear(coverColor);
}this.Bounds=newRectangle(0,0, width, height);this.screen=screen;this.DoubleBuffered=true;
}protectedoverridevoidOnMouseDown(MouseEventArgs e) {if(e.Button==MouseButtons.Left) {
isClipping=true;
rectSelected.Location=e.Location;
}elseif(e.Button==MouseButtons.Right) {this.DialogResult=DialogResult.OK;
}
}protectedoverridevoidOnMouseMove(MouseEventArgs e) {if(e.Button==MouseButtons.Left&&isClipping) {
rectSelected.Width=e.X-rectSelected.X;
rectSelected.Height=e.Y-rectSelected.Y;this.Invalidate();
}
}protectedoverridevoidOnMouseUp(MouseEventArgs e) {if(e.Button==MouseButtons.Left&&isClipping) {
rectSelected.Width=e.X-rectSelected.X;
rectSelected.Height=e.Y-rectSelected.Y;this.Invalidate();
resultBmp=newBitmap(rectSelected.Width, rectSelected.Height);using(Graphics g=Graphics.FromImage(resultBmp)) {
g.DrawImage(screen,newRectangle(0,0, rectSelected.Width, rectSelected.Height), rectSelected, GraphicsUnit.Pixel);
}this.DialogResult=DialogResult.OK;
}
}protectedoverridevoidOnPaint(PaintEventArgs e) {
Graphics g=e.Graphics;
g.DrawImage(screen,0,0);
g.DrawImage(coverLayer,0,0);
PaintRectangle();
}protectedoverridevoidOnPaintBackground(PaintEventArgs e) {
}protectedoverridevoidOnKeyDown(KeyEventArgs e) {if(e.KeyCode==Keys.Escape) {this.DialogResult=DialogResult.Cancel;
}
}privatevoidPaintRectangle() {using(Graphics g=Graphics.FromImage(coverLayer)) {
g.Clear(coverColor);
GraphicsPath path=newGraphicsPath();
path.AddRectangle(this.Bounds);
path.AddRectangle(rectSelected);
g.FillPath(rectBrush, path);
g.DrawRectangle(Pens.Blue, rectSelected);
}
}publicBitmap ResultBitmap {get{returnresultBmp; }
}
}