写在前面:对于画笔Pen,可以设置线帽,也就是线的两端的样式,两端可以显示为不同的形状,如三角形,圆形,菱形,无形状等等,这就是LineCap的设置,它是一个Enum类型的类,是System.Drawing.Drawing2D命名空间下面的类。
效果图
LineCap各个枚举变量的说明如下:Flat指定平线帽,Square指定方线帽,Round指定圆线帽,Triangle指定三角线帽,NoAnchor指定没有锚,SquareAnchor指定方锚头帽,RoundAnchor指定圆锚头帽,DiamondAnchor指定菱形锚头帽,ArrowAnchor指定箭头状锚头帽,AnchorMask指定用于检查线帽是否为锚头帽的掩码,Custom指定自定义线帽,而具体显示的效果可以参考下面的图形。图形右边的说明是通过DrawString画出来的,而不是画线帽时自动显示的。
源代码
说明,在下面的文章中,不再提供using部分的代码,如果发现类型没找到,可以查一查对象查看器,或引入System.Drawing.Drawing2D试试。因为using部分的代码,真是多余的,IDE工具(如VisualStduio2005)会帮你生成。注意到,Enum.GetValues(typeof(LineCap))是获取枚举类型的各个属性,然后设置好Pen的起点线帽样式和终点线帽样式。Form1_Paint是一个不断重绘的函数,也就是说,里面的Graphics对象实例会不断地执行动作,如果将代码放到Form1_Load请不会有效果的,因为Form1_Load的代码,只在Form1加载时,执行一次。Pen使用之后,要释放资源,它会占用系统资源的。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;
namespace TestControl
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
int y = 50;
int x = 100;
Pen _pen = new Pen(Color.Blue, 10);
//指定画笔宽度
_pen.Width = 10;
Graphics g = e.Graphics;
//遍历LineCap枚举类型
foreach (LineCap _LineCap in Enum.GetValues(typeof(LineCap)))
{
_pen.StartCap = _LineCap;
_pen.EndCap = _LineCap;
g.DrawLine(_pen, x, y, x+60, y);
//显示线帽的样式
g.DrawString("LineCap." + _LineCap.ToString(), this.Font, Brushes.Black, x + 80, y-5);
y += 20;
}
//释放资源
_pen.Dispose();
}
}
}
以前画线的端点的时候要自己搞,居然C#想的周到,厉害,现在的名字叫线帽。