GDI+画笔(Pen)

发布时间 2023-07-17 16:50:08作者: 左边的翼

构造方法1:Pen(const Brush* brush, REAL width=1.0f)

注:关于第一种构造方法中的形参(const Brush* brush)做简单说明,Brush在Gdiplus中为抽象基类,Pen在该构造方式下只能通过Brush子类进行实例化,Brush子类在后续章节将做详细介绍。通过Brush一个子类构造Pen对象,该构造方法下代码效果如下:

 

Graphics graphics(dc);
Gdiplus::Pen p(&HatchBrush(HatchStyle::HatchStyle05Percent,Color(255,0,0),Color(0,255,0)),50.0f);
graphics.DrawLine(&p, 0, 100, 100, 100);

构造方法2:Pen(const Color& clr, REAL width=1.0f)

该构造方法下代码效果如下:

1 Graphics graphics(dc);
2 Gdiplus::Pen p(&HatchBrush(HatchStyle::HatchStyle05Percent,Color(255,0,0),Color(0,255,0)),50.0f);
3 graphics.DrawLine(&p, 0, 100, 100, 100);
4 
5 Gdiplus::Pen p1(Color(255, 0, 0), 50.0f);
6 graphics.DrawLine(&p1, 0, 30, 100, 30);

画笔样式:

 1、设置画帽

线的画帽在官方文档中的样式有如下几种:

 

typedef enum LineCap {
  LineCapFlat = 0,
  LineCapSquare = 1,
  LineCapRound = 2,
  LineCapTriangle = 3,
  LineCapNoAnchor = 0x10,
  LineCapSquareAnchor = 0x11,
  LineCapRoundAnchor = 0x12,
  LineCapDiamondAnchor = 0x13,
  LineCapArrowAnchor = 0x14,
  LineCapCustom = 0xff,
  LineCapAnchorMask = 0xf0
} ;

 

画帽代码效果举例如下所示:

Graphics graphics(dc);
Gdiplus::Pen p1(Color(255, 0, 0), 50.0f);
p1.SetStartCap(LineCapTriangle);
p1.SetEndCap(LineCapRound);
graphics.DrawLine(&p1, 30, 80, 130, 80);

2、虚线画笔

线的虚线样式在官方文档如下所示:

1 typedef enum DashStyle {
2   DashStyleSolid,
3   DashStyleDash,
4   DashStyleDot,
5   DashStyleDashDot,
6   DashStyleDashDotDot,
7   DashStyleCustom
8 } ;

系统效果与自定义效果代码如下所示:

 1 Graphics graphics(dc);
 2 //系统效果
 3 Gdiplus::Pen p1(Color(255, 0, 0), 10.0f);
 4 p1.SetDashStyle(Gdiplus::DashStyle::DashStyleDashDot);
 5 graphics.DrawLine(&p1, 0, 50, 1000, 50);
 6 //自定义效果
 7 Gdiplus::Pen p(Color(0, 255, 0), 10.0f);
 8 Gdiplus::REAL r[] = { 5.0,2.0,15.0,4.0 };
 9 p.SetDashPattern(r, 4);
10 graphics.DrawLine(&p, 0, 80, 1000, 80);