画笔
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
} ;