CPen

CPen是繪圖的基本工具,漢語意思是畫筆。

畫筆是繪圖的基本工具,在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{ /*lb*/
UINT lbStyle;
COLORREF lbColor;
LONG lbHatch;
}LOGBRUSH;
該結構定義了一個畫刷的風格、顏色和陰影線種類。
畫刷的風格值
參數值 說明
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,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 所有)
3.CPen創建的例子
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);

相關詞條

相關搜尋

熱門詞條

聯絡我們