CPen

CPen

CPen畫筆是繪圖的基本工具,在MFC中畫筆是CPen類的對象,它用來在DC上完成繪製線條的任務。初始時會有默認形態,但是可以根據個人喜好進行程序的編寫從而改變其形態。

產品簡介


畫筆是繪圖的基本工具,在MFC中畫筆是CPen類的對象,它用來在DC上完成繪製線條的任務。初始化時,系統自動提供了一支黑色的默認畫筆。如果程序設計人員對這個默認的畫筆不滿意,可以自己創建畫筆來替換它。所謂的自定義畫筆,就是程序員自己創建的CPen類對象,創建畫筆對象時,需要使用CPen類的構造函數,它的原型為:

成員函數


CPen(Int style,int width ,COLORREF color);
style:畫筆的樣式
width:畫筆的寬度
color:畫筆的顏色(顏色用RGB值來描述)
1.CPen類構造函數該類共重載了3個構造函數;
CPen( );
CPen(int nPenStyle, int nWidth, COLORREF crColor);
throw(CResourceException);
CPen(int nPenStyle, int mWidth, const LOGVRUSH* pLogBrush, int nStyleCount=0, const DWORD* lpStyle=NULL);
throw(CResourceException);
參數nPenStyle的值
參數值註釋
PS_SOLID 創建一個實線畫筆
PS_DASH 創建一個虛線畫筆,該值只有當畫筆寬度等於1個設備單位或更小時才有效
PS_DOT 創建一個點線畫筆,該值只有當畫筆寬度等於1個設備單位或更小時才有效
PS_DASHDOT 創建一個點和虛線交替畫筆,該值只有當畫筆寬度等於1個設備單位或更小時才有效
PS_DASHDOTDOT 創建一個雙點線畫筆,該值只有當畫筆寬度等於1個設備單位或更小時才有效
PS_NULL 創建一個空線畫筆
PS_INSIDEFRAME 創建一個內框線畫筆,該畫筆可以在WindowsGDI輸出函數定義的矩形邊界所生成的封閉形狀的邊框內繪製直線
PS_GEOMETRIC 創建一個幾何畫筆
PS_COSMETIC 創建一個裝飾畫筆
PS_ALTERNATE 創建一個設置其他像素的畫筆
PS_USERSTYLE 創建一個使用由用戶提供的風格矩陣的畫筆
PS_ENDCAP_ROUND 尾帽為圓形的
PS_ENDCAP_SQUARE 尾帽為方形的
PS_ENDCAP_FLAT 尾帽為平坦的
PS_JOIN_BEVEL 成尖角連接
PS_JOIN_MITET 通過setMiterLimit函數設置的當前極限值範圍內斜接;否則,成尖角連接
PS_JOIN_ROUND 成圓角連接
參數pLogBrush指向一個LOGBRUSH結構。該結構原型聲明如下:
typedef struct tag LOGBRUSH{
UINT lbStyle;
COLORREF lbColor;
LONG lbHatch;
該結構定義了一個畫刷的風格、顏色和陰影線種類。
畫刷的風格值
參數值 說明
BS_DIBPATTERN 由設備無關的點陣圖定義的圖形畫刷。如果該參數值為該值,則成員lbHatch包含了一個被壓縮的DIB句柄
BS_DIBPATTERNPT 由設備無關的點陣圖定義的圖形畫刷。如果該參數值為該值,則成員lbHatch包含了一個被壓縮的DIB指針
BS_HATCHED 陰影線畫刷
BS_HOLLOW 中空畫刷
BS_NULL 與參數值為BS_HOLLOW定義相同的畫刷
BS_PATTERN 由內存點陣圖定義的圖形畫刷
BS_SOLID 實畫刷
BS_NULL 與參數值為BS_HOLLOW定義相同的畫刷
BS_PATTERN 由內存點陣圖定義的圖形畫刷
BS_SOLID 實畫刷
2、CPen類初始化成員函數
(1)CreatePen( )成員函數其原型聲明如下:
BOOL CreatePen(int nPenStyle, int nWidth, COLORREF crColor);
BOOL CreatePen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush,
int nStyleCount = 0, const DWORD* lpStyle = NULL);
(2)CreatePenIndirect( )成員函數的原型聲明如下:
BOOL CreatePenIndirect(LPLOGPEN lpLogPen);
LOGPEN結構的具體定義如下:
typedef struct tagLOGPEN{ // lgpn
UNIT lopnStyle;
POINT lopnWidth;
COLORREF lopnColor;
}LOGPEN;
可以使用RGB宏來完成顏色設定:
COLORREF RGB(cRed,cGreen,cBlue);
也可以使用COLORREF,其結構為0x00bbggrr。
註:COLORREF實際上就是一個DWORD類型的。所有如果進行顏色傳遞直接按%d格式就可以,不需要格式的轉換。
( XXT: 以上是我從別人的博客直接摘抄過來的,以供大家學習使用,版權歸原作者——linger 所有)

創建示例


CPen pen1;
CPen *oldPen;
pen1.CreatePen(PS_SOLID,2,RGB(192,192,192));//創建對象
oldPen = pDC->SelectObject(&pen1);//將畫筆選入設備描述表,並保存舊的畫筆
pDC->MoveTo(10,10);//定義起點
pDC->LineTo(200,20);//線的終點
pDC->SelectObject(oldPen);//將以前的畫筆選入設備描述表