MFC中GDI之CPen(画笔)
生活随笔
收集整理的這篇文章主要介紹了
MFC中GDI之CPen(画笔)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
CPen 畫筆
由CGdiObject類派生,用于修飾線條的顏色、寬度和線型(實線、虛線、點劃線等)。
| CPen(int nPenStyle, int nWidth, COLORREF crColor) | 在構(gòu)造函數(shù)中創(chuàng)建一個畫筆 |
| BOOL CreatePen(int nPenStyle, int nWidth, COLORREF crColor) | 根據(jù)指定數(shù)值創(chuàng)建一個畫筆 |
| BOOL CreatePenIndirect(LPLOGPEN lpLogPen) | 根據(jù)LOGPEN結(jié)構(gòu)體創(chuàng)建一個畫筆 |
| static CPen* FromHandle(HPEN hPen) | 將HPEN句柄轉(zhuǎn)化為CPen對象 |
| operator HPEN() const | 從CPen對象中獲取HPEN句柄 |
| int GetLogPen(LOGPEN* pLogPen) | 獲取畫筆的顏色、粗度等屬性信息 |
/* Pen Styles */
#define PS_SOLID 0 /* 實線 */
#define PS_DASH 1 /* ------- */
#define PS_DOT 2 /* ....... */
#define PS_DASHDOT 3 /* _._._._ */
#define PS_DASHDOTDOT 4 /* _.._.._ */
#define PS_NULL 5 /* 無邊框 */
/* Logical Pen */
typedef struct tagLOGPEN
{
UINT lopnStyle;
POINT lopnWidth;
COLORREF lopnColor;
} LOGPEN, *PLOGPEN;
例子:
void CtestDialogDlg::OnPaint()
{
// CPaintDC 是標(biāo)準(zhǔn)客戶區(qū)繪畫。刷新不消失。CPaintDC中封裝了BeginPaint(),EndPaint()
// 而CClientDC 是臨時客戶區(qū)繪圖,刷新會消失。封裝了GetDC(),ReleaseDC()
CPaintDC dc(this); // device context for painting
//默認(rèn)畫筆是黑色實線,寬度為1
dc.MoveTo(20, 20);
dc.LineTo(120, 20);
//通過一個構(gòu)造函數(shù)創(chuàng)建一個畫筆
CPen p1(PS_SOLID, 5, RGB(255, 0, 0));
CPen* pOldPen = dc.SelectObject(&p1);
dc.MoveTo(20, 30);
dc.LineTo(120, 30);
//通過CreatePen 創(chuàng)建一個畫筆
CPen p2;
p2.CreatePen(PS_DASHDOT, 1, RGB(0, 0, 255));//注意,虛線、點線等,只有在寬度為1時,才有效
dc.SelectObject(&p2);
dc.MoveTo(20, 40);
dc.LineTo(120, 40);
//通過默認(rèn)畫筆畫一個矩形
dc.SelectObject(pOldPen);
dc.Rectangle(140, 20, 240, 100);
dc.RoundRect(250, 20, 350, 100, 20, 20);
//畫一個虛線邊框的矩形
dc.SelectObject(&p2);
dc.Rectangle(20, 50, 110, 100);
//畫一個無邊框的矩形
CPen p3(PS_NULL, 1, RGB(0, 0, 0));
dc.SelectObject(&p3);
dc.Rectangle(20, 110, 120, 200);
//等價的無邊框的填充方法
dc.FillSolidRect(140, 110, 100, 90, RGB(255, 255, 255));
/*
調(diào)用FillSolidRect時,以前用SetBkColor設(shè)置的背景色,被設(shè)置為clr指定的顏色。
就是說你的背景色已經(jīng)變成了FillSolidRect設(shè)置的顏色了。
也許正常是看不出來的。
但當(dāng)以再用畫筆畫PS_DOT類的線時,
你會發(fā)現(xiàn)你虛線原來的空白地方變成了FillSolidRect設(shè)置的顏色了。
用FillSolidRect時一定要注意。
可以用CDC::FillRect()
CBrush brush;
brush.CreateSolidBrush(RGB(0,100,255));
dc.FillRect(&rect,&brush);
*/
dc.SelectObject(&p2);//選擇虛線,F(xiàn)illSolidRect的顏色會是虛線的斷的顏色
dc.FillSolidRect(20, 210, 100, 20, RGB(255, 0, 0));
dc.MoveTo(20, 240);
dc.LineTo(120, 240);
//選擇回原來的畫筆
dc.SelectObject(pOldPen);
}
View Code
結(jié)果:
常記溪亭日暮,沉醉不知歸路。興盡晚回舟,誤入藕花深處。爭渡,爭渡,驚起一灘鷗鷺。
昨夜雨疏風(fēng)驟,濃睡不消殘酒。試問卷簾人,卻道海棠依舊。知否?知否?應(yīng)是綠肥紅瘦。
總結(jié)
以上是生活随笔為你收集整理的MFC中GDI之CPen(画笔)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拖尾截尾
- 下一篇: python 中的按位运算