畫筆常用于繪制圖形的輪廓.GDI+的畫筆除了具有常見的色彩和寬度屬性外,還具有對齊方式,線帽,變換方式等屬性。GDI+中通過Pen類來定義畫筆對象。
(一)、構造與使用畫筆
Pen(brush, width); //用顔色與線寬構造一個畫筆
Pen(color, width); //用畫刷與寬度構造一個畫筆
例子:
Pen pen(Color(255, 0, 0, 0),1);//用第一個構造函數.構造寬度為1的黑色畫刷
graphics.DrawLine(&pen, 20, 10, 300, 100);
Image image(L"Texture1.jpg");
TextureBrush tBrush(&image);
graphics.DrawImage(&image, 0, 0, image.GetWidth(), image.GetHeight());
Pen texturedPen(&tBrush, 30);//用第二個構造函數,用一個紋理畫刷
graphics.DrawEllipse(&texturedPen, 100, 20, 200, 100);
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmLuVGUlVHd4VGVvw1cldWYtl2LcFDNlNXYit2Y29CXsFmbyV3bq9CX05WZtV3YvR2Lc12bj5SZzFmYrNmdvw1LcpDc0RHaiojIsJye.jpg)
(二)、設值寬度與對齊方式
建立畫筆時,可以把寬度當作參數傳給構造函數,我們也可以使用SetWidth()方法來改變畫筆的線寬。一個理想的線寬度為0,
我們繪制一條直線時,像素位于直線的正中,下面的例子中我們用寬度為1的先用黑畫筆繪制一條直線,在用綠色的寬度為10的畫筆再繪制一次。
Pen blackPen(Color(255, 0, 0, 0), 1);
Pen greenPen(Color(255, 0, 255, 0), 10);
greenPen.SetAlignment(PenAlignmentCenter);
graphics.DrawLine(&greenPen, 10, 100, 100, 50);
graphics.DrawLine(&blackPen, 10, 100, 100, 50);
我們把綠色畫筆設為中對齊時:
graphics.DrawRectangle(&greenPen, 10, 100, 50, 50);
graphics.DrawRectangle(&blackPen, 10, 100, 50, 50);
我們把綠色畫筆設為内對齊時:
greenPen.SetAlignment(PenAlignmentInset);
這樣我們可以按需要來設定對齊方式。
(三)、設定筆帽
我們可以用多種方式來繪制線條的頭部與尾部形狀,GDI+支援圓形,方形,菱形,與箭頭等樣式的筆帽。
Pen pen(Color(255, 0, 0, 255), 8);
pen.SetStartCap(LineCapArrowAnchor);
pen.SetEndCap(LineCapRoundAnchor);
graphics.DrawLine(&pen, 20, 175, 300, 175);
效果如下:
(四)、設定兩條直線的連接配接形
GDI+為我們提供了當兩條直線連接配接時連接配接處形狀的設定,有四種方式:斜接(miter)、斜切(bevel),圓形(round),剪裁斜接(miter clipped)。
GraphicsPath path;
Pen penJoin(Color(255, 0, 0, 255), 8);
path.StartFigure();
path.AddLine(Point(50, 200), Point(100, 200));
path.AddLine(Point(100, 200), Point(100, 250));
penJoin.SetLineJoin(LineJoinBevel);
graphics.DrawPath(&penJoin, &path);
(五)、自定義線型
GDI+為我們提供了好多線型,如果滿足不了我們的需求,我們可以用成員函數SetDashPattern可以使用一個預定義的數組來描述畫筆的虛實,
下面的例子用自定義風格繪制了一條直線,所用數組為{5, 2, 15, 4},如果你用畫筆寬度去乘數組得{25, 10, 75, 20},顯示的曲線在25與75間變換,
空白在10與20間變換。
REAL dashValues[4] = {5, 2, 15, 4};
Pen blackPen(Color(255, 0, 0, 0), 5);
blackPen.SetDashPattern(dashValues, 4);
graphics.DrawLine(&blackPen, Point(5, 5), Point(405, 5));
有一點要明白,最後的那條虛線要比25機關少,這樣它才能在405處結束。
(六)、畫筆的旋轉變換
我們可以在程式中修改畫筆在水準與垂直方向上的寬度的,假設我們有一個畫筆的寬度為5,那麼我們用它來繪制的矩形在四條邊上長度都是一樣的,
如果想讓在水準與數值方向上不一緻,我們可以使用變換,有三種方式可以實作上面的要求:
Pen pen(Color(255,0,0,255));
pen.SetWidth(5);
Matrix matrix(1,0,0,2,0,0);
pen.MutiplyTransform(&matrix,MatrixOrderPrepend);//方法一
pen.SetTransform(&matrix);//方法二
pen.ScaleTransform(1,4);
graphics.DrawRectange(&pen,50,50,200,200);
還可以對畫筆進行旋轉變換,旋轉是相對在水準寬度與垂直位置上不一緻的畫筆而言的左圖為縮放變換,右圖為旋轉變換。