using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class DrawLine : UserControl
{
public delegate void DrawChangeDataDelegate(ref string data);
[Description("Callback event for the ChangeData window")]
public event DrawChangeDataDelegate DrawChangeData;
private BufferedGraphicsContext context;
private BufferedGraphics grafx;
public DrawLine()
{
InitializeComponent();
SetStyle(ControlStyles.UserPaint,true );
SetStyle(ControlStyles.ResizeRedraw,true );
SetStyle(ControlStyles.OptimizedDoubleBuffer ,true );
context = BufferedGraphicsManager.Current;
context.MaximumBuffer = new Size(this.Width + 1, this.Height + 1);
grafx = context.Allocate(this.CreateGraphics(), new Rectangle(0, 0, this.Width, this.Height));
DrawToBuffer(grafx.Graphics );
}
private void DrawToBuffer(Graphics g)
{
string data=string.Empty ;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
g.DrawLine(new Pen (Color.White ),new Point (3,3),new Point (this.Width-3,this.Height-3));
if (DrawChangeData != null)
DrawChangeData(ref data);
using (Font ft = new Font("Arial", 8f, FontStyle.Regular))
g.DrawString(data,ft,new SolidBrush (Color.White ),new PointF (3,3));
}
protected override void OnResize(EventArgs e)
{
context.MaximumBuffer = new Size(this.Width +1,this.Height +1);
if(grafx !=null)
{
grafx.Dispose ();
grafx=null;
}
grafx = context.Allocate(this.CreateGraphics(), new Rectangle(0, 0, this.Width, this.Height));
DrawToBuffer(grafx.Graphics);
base.OnResize(e);
}
protected override void OnPaint(PaintEventArgs e)
{
System.Diagnostics.Debug.WriteLine(string.Format ("MousePosition:{0}", MousePosition ));
DrawToBuffer(grafx.Graphics);
grafx.Render(e.Graphics );
}
protected override void OnMouseEnter(EventArgs e)
{
context.MaximumBuffer = new Size(this.Width + 1, this.Height + 1);
if (grafx != null)
{
grafx.Dispose();
grafx = null;
}
grafx = context.Allocate(this.CreateGraphics(), new Rectangle(0, 0, this.Width, this.Height));
DrawToBuffer(grafx.Graphics);
base.OnMouseEnter(e);
}
protected override void OnMouseLeave(EventArgs e)
{
context.MaximumBuffer = new Size(this.Width + 1, this.Height + 1);
if (grafx != null)
{
grafx.Dispose();
grafx = null;
}
grafx = context.Allocate(this.CreateGraphics(), new Rectangle(0, 0, this.Width, this.Height));
DrawToBuffer(grafx.Graphics);
base.OnMouseLeave(e);
}
}
}