using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace DrawTest
{
public delegate void DrawMeHandler(Graphics g);
public delegate void MouseMoveHandler(Point p);
public partial class Canvas : UserControl
{
RectangleFigure rectangleFigure = new RectangleFigure();
DrawMeHandler drawMeHandler;
MouseMoveHandler mouseMoveHandler;
public Canvas()
{
InitializeComponent();
this.DoubleBuffered = true;
this.Paint += Canvas_Paint;
this.Load += Canvas_Load;
this.MouseMove += Canvas_MouseMove;
}

void Canvas_MouseMove(object sender, MouseEventArgs e)
{
this.mouseMoveHandler.Invoke(e.Location);
this.Refresh();
}

void Canvas_Load(object sender, EventArgs e)
{
rectangleFigure.X = 10;
rectangleFigure.Y = 10;
rectangleFigure.Width = 100;
rectangleFigure.Height = 50;
drawMeHandler = new DrawMeHandler(rectangleFigure.DrawMe);
mouseMoveHandler = new MouseMoveHandler(rectangleFigure.MouseMove);

}

void Canvas_Paint(object sender, PaintEventArgs e)
{
if (drawMeHandler != null) drawMeHandler.Invoke(e.Graphics);
}


/// <summary>
/// 矩形对象
/// </summary>
public class RectangleFigure
{

public int X { get; set; }
public int Y { get; set; }
public int Height { get; set; }
public int Width { get; set; }

public bool Actived { get; set; }

public bool IsExist(Point p)
{
Rectangle rectangle = new Rectangle(this.X, this.Y, this.Width, this.Height);
return rectangle.Contains(p);
}

public void MouseMove(Point p)
{
Actived = IsExist(p);
}

public void DrawMe(Graphics g)
{
Pen p = new Pen(Color.Black);
g.FillRectangle(p.Brush, this.X, this.Y, this.Width, this.Height);
if (Actived)
{
p.Color = Color.Red;
g.DrawRectangle(p, this.X, this.Y, this.Width, this.Height);
}
}
}
}
}