using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BCSVClient
{
/// <summary>
/// 窗口定义
/// </summary>
public partial class LineTest : Form
{
public LineTest()
{
drawPanel.BackColor = Color.White;
drawPanel.Cursor = Cursors.Cross;
drawPanel.Dock = DockStyle.Fill;
drawPanel.MouseDown += new MouseEventHandler(drawPanel_MouseDown);
drawPanel.MouseUp += new MouseEventHandler(drawPanel_MouseUp);
drawPanel.MouseMove += new MouseEventHandler(drawPanel_MouseMove);
drawPanel.Paint += new PaintEventHandler(drawPanel_Paint);
Controls.Add(drawPanel);
}
/// <summary>
/// 线条对象
/// </summary>
class Line
{
/// <summary>
/// 建立线条对象,并设置起点
/// </summary>
/// <param name="startPoint">此线条的起点</param>
public Line(Point startPoint)
{
StartPoint = startPoint;
EndPoint = startPoint;
}
public Point StartPoint = Point.Empty;
public Point EndPoint = Point.Empty;
}
public class DrawPanel : Control
{
public DrawPanel()
{
this.DoubleBuffered = true;
this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw, true);
}
}
/// <summary>
/// 用于保存绘出线条的集合
/// </summary>
private List<Line> lines = new List<Line>();
/// <summary>
/// 用于保存当前正在绘制的线条
/// </summary>
private Line drawingLine = null;
/// <summary>
/// 用于显示绘图的面板组件
/// </summary>
private DrawPanel drawPanel = new DrawPanel();
/// <summary>
/// 在绘图区释放鼠标,结束当前线条绘制
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void drawPanel_MouseUp(object sender, MouseEventArgs e)
{
if (drawingLine == null) return;
drawingLine.EndPoint = e.Location;
drawingLine = null;
}
/// <summary>
/// 在绘图区按下鼠标,开始绘制新线条
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void drawPanel_MouseDown(object sender, MouseEventArgs e)
{
drawingLine = new Line(e.Location);
lines.Add(drawingLine);
}
/// <summary>
/// 在绘图区移动鼠标时,如果正在绘制新线条,就更新绘制面板
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void drawPanel_MouseMove(object sender, MouseEventArgs e)
{
if (drawingLine != null)
{
drawingLine.EndPoint = e.Location;
drawPanel.Invalidate();
}
}
/// <summary>
/// 绘制效果到面板
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void drawPanel_Paint(object sender, PaintEventArgs e)
{
Bitmap bp = new Bitmap(drawPanel.Width, drawPanel.Height); // 用于缓冲输出的位图对象
Graphics g = Graphics.FromImage(bp);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; // 消锯齿(可选项)
Pen p = new Pen(Color.Black);
foreach (Line line in lines)
{
if (line == drawingLine)
{
// 当前绘制的线条是正在鼠标定位的线条
p.Color = Color.Blue;
}
else
{
p.Color = Color.Black;
}
g.DrawLine(p, line.StartPoint, line.EndPoint);
}
// 将缓冲位图绘制到输出
e.Graphics.DrawImage(bp, Point.Empty);
}
}
}
C# 画线 Draw a Line
最新推荐文章于 2019-09-27 11:17:33 发布