Visual Studio C#.NET 原生支持线帽LineCap


写在前面:对于画笔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#想的周到,厉害,现在的名字叫线帽。

你可能感兴趣的:(C#/VS.Net/Mono)