GDI+ 三画笔

画笔

Pen( const Color& color, REAL width );

画笔颜色与宽度

color 是用来指定画笔颜色,width 用来指定画笔宽度
使用方法:

1)Pen newPen( Color( 255, 0, 0, 255 ), 3 );2)Pen newPen(Color( 0, 0, 255), 3);3)Pen newPen(Color::Blue, 3);4)COLORREF crRef = RGB( 0, 0, 255); 
	 Color color; 
	 color.SetFromCOLORREF(crRef); 
	 Pen newPen(color, 3);

画笔风格

Pen 类还提供 SetDashStyle方法来设置画笔的预定义风格和自定义类型

DashStyleSolid(实线)、DashStyleDash(虚线)、DashStyleDot(点线)、DashStyleDashDot(点划线)、
DashStyleDashDotDot(双点划线)和 DashStyleCustom(自定义类型)
使用方法:

Graphics graphics( pDC->m_hDC ); 
Pen pen(Color(255, 0, 0, 255), 15); 
pen.SetDashStyle(DashStyleDash); 
graphics.DrawLine(&pen, 0, 50, 400, 150);

预定义风格也可以使用SetDashPattern函数
Status SetDashPattern( const REAL* dashArray, INT count);
dashArray 是一个包含短划和间隔长度的数组

REAL dashVals[4] = { 
2, // 短划长为 2 
2, // 间隔为 2 
15, // 短划长为 15 
2}; // 间隔为 2 
Pen pen(Color(255, 0, 0, 0), 5); 
pen.SetDashPattern(dashVals, 4); 
graphics.DrawLine(&pen, 5, 20, 405, 200);

效果如图: —— - —— - —— - —— -

直线的起始端和终止端的样式

使用SetStartCap 和 SetEndCap 方法来设置一条直线的起始端和终止端的样式

Status SetLineCap(
  [in] LineCap startCap,
  [in] LineCap endCap,
  [in] DashCap dashCap
);

LineCap 枚举的元素,指定行的起始帽。
LineCap 枚举的元素,该元素指定行的结束上限。
DashCap 枚举的元素,指定虚线中短划线的开始和结束顶帽。

typedef enum LineCap {
  LineCapFlat = 0,		// 指定行在最后一个点结束。 终点正方形
  LineCapSquare = 1,  // 指定一个平方帽。正方形的中心是线条的最后一个点。正方形的高度和宽度是线条宽度
  LineCapRound = 2,  // 指定圆帽。 圆的中心是线条中的最后一个点。 圆的直径是线条宽度
  LineCapTriangle = 3, // 指定三角帽。 三角形的基数是线条中的最后一个点。 三角形的基数是线条宽度
  LineCapNoAnchor = 0x10, // 指定行尾未定位。
  LineCapSquareAnchor = 0x11, // 指定线端用正方形定位。正方形的中心是线条的最后一个点。正方形的高度和宽度是线条宽度
  LineCapRoundAnchor = 0x12, // 指定线端用圆定位。 圆的中心位于线条的最后一个点。 圆比线条宽
  LineCapDiamondAnchor = 0x13, // 指定线端以菱形定位,(以 45 度) 旋转的正方形。菱形的中心位于线条的最后一点。菱形比线条更宽
  LineCapArrowAnchor = 0x14, // 指定线端用箭头定位。 箭头点位于线条的最后一个点。 箭头比线条宽
  LineCapCustom = 0xff,
  LineCapAnchorMask = 0xf0
} ;
typedef enum DashCap {
  DashCapFlat = 0,	// 指定每一划线段的两端均为方形的方帽。
  DashCapRound = 2, // 指定每一划线段的两端均为圆角的圆帽。
  DashCapTriangle = 3 // 指定每一划线段的两端均为带尖的三角帽。
} ;

RotateTransform 方法使用自身乘积和旋转矩阵更新此 Pen 对象的世界转换矩阵

Status RotateTransform(
  [in] REAL        angle,		// 指定以度为单位旋转角度的实数
  [in] MatrixOrder order // 指定乘法的顺序。 MatrixOrderPrepend 指定旋转矩阵位于左侧,MatrixOrderAppend 指定旋转矩阵位于右侧
);

SetLineJoin 方法可以指定连接的线是斜接 (与尖角) 、斜角、圆角还是剪裁联接

Status SetLineJoin(
  [in] LineJoin lineJoin
);

typedef enum LineJoin {
  LineJoinMiter = 0,  // 指定斜联接
  LineJoinBevel = 1, // 指定成斜角的联接。 这将产生一个斜角
  LineJoinRound = 2, // 指定圆形联接。 这将在两条线之间产生平滑的圆弧
  LineJoinMiterClipped = 3
} ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值