(一)、構造與使用畫筆
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);
(二)、設值寬度與對齊方式
創建畫筆時,可以把寬度當作參數傳給構造函數,我們也可以使用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);
還可以對畫筆進行旋轉變換,旋轉是相對在水平寬度與垂直位置上不一致的畫筆而言的左圖爲縮放變換,右圖爲旋轉變換。