加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

c# 自定义线帽(CustomLineCap)的使用

(2013-01-10 22:41:34)
标签:

c

gdi

线帽

customlinecap

自定义

it

分类: C#.NET

1.在new CustomLineCap实例时,对于CustomLineCap (GraphicsPath, GraphicsPath)构造函数,第一个参数表示自定义线帽填充的内容的对象,可以设置成null,第二个参数表示自定义线帽轮廓的对象。
(GraphicsPath类:表示一系列相互连接的直线和曲线,无法继承此类。)
示例代码:
Pen XuXianpenHasCap=null;//定义一个Pen对象实例
XuXianpenHasCap = new Pen(System.Drawing.Color.Red, 1.0f);//初始该Pen对象实例

GraphicsPath hPath = new GraphicsPath();//定义一个GraphicsPath对象实例,以便线帽中使用
hPath.AddLine(new Point(0, 0), new Point(0, 5));//初始线帽轮廓
hPath.AddLine(new Point(0, 5), new Point(3, 0));//特别注意:坐标系是以所画直线端点为原点,直线方向为y轴,垂直方向为x轴(有点费解)
hPath.AddLine(new Point(0, 5), new Point(-3, 0));//三点连线画出了一个箭头

CustomLineCap HookCap = new CustomLineCap(null, hPath);//初始自定义线帽对象实例
//HookCap.WidthScale = 1.0f;//设置线帽和直线的比例
HookCap.SetStrokeCaps(LineCap.Round, LineCap.Round);//设置用于构成此自定义线帽的起始直线和结束直线的线帽(似乎不能是LineCap.ArrowAnchor)

XuXianpenHasCap.StartCap = LineCap.Flat;//设置Pen对象实例的开始端线帽,为系统定义线帽
XuXianpenHasCap.CustomEndCap = HookCap;//设置Pen对象实例的开始端线帽,为自定义线帽

g.DrawLine(XuXianpenHasCap, x2, y2, (int)((x + x2) / 2), (int)((y + y2) / 2));//使用该Pen实例画线



画填充的线帽时,根据MSDN的CustomLineCap文档,文档说FillPath必须和Y轴交叉过。【太坑爹了!】

 

protect override void OnPaint(PaintEventArgs e)
{
    Graphics e.Graphics;
    GraphicsPath hPath new GraphicsPath();
 
    // Create the outline for our custom end cap. 
    hPath.AddLine(new Point(0, -1), new Point(3, -1));
    hPath.AddLine(new Point(3, -1), new Point(0, 15));
    hPath.AddLine(new Point(0, 15), new Point(-3, -1));
    hPath.CloseFigure();
 
    // Construct the hook-shaped end cap. 
    CustomLineCap HookCap new CustomLineCap(hPath, null);       //<---------
 
    // Set the start cap and end cap of the HookCap to be rounded. 
    HookCap.SetStrokeCaps(LineCap.Round, LineCap.Round);
 
    // Create pen and set end custom start and end 
    // caps to the hook cap. 
    Pen customCapPen new Pen(Color.Black, 10);
    customCapPen.CustomStartCap HookCap;
    customCapPen.CustomEndCap HookCap;
 
    // Create line to draw. 
    Point[] points new Point(100, 100), new Point(200, 50),         new Point(250, 300) };
 
    // Draw the lines. 
    g.DrawLines(customCapPen, points);
    g.Dispose();
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有