1.
画笔的构造:
画笔的构造函数有:
CPen();
CPen( int nPenStyle, int nWidth, COLORREF crColor ); throw( CResourceException );
CPen( int nPenStyle, int nWidth , const LOGBRUSH* pLogBrush, int nStyleCount =0, const DWORD* lpStyle = NULL ); throw( CResourceException );
参数说明:
1. NPenStyle::指定画笔的风格。可以有如下的值,
PS_SOLID 创建一支实线画笔。l
PS_DASH 创建一支虚线画笔。只有当画笔宽度为1或更小(以设备单位计算)时才有效。
PS_DOT 创建一支点线画笔。只有当画笔宽度为1或更小(以设备单位计算)时才有效。
PS_DASHDOT 创建一支虚线和点交替的画笔。只有当画笔宽度为1或更小(以设备单位计算)时才有效。
PS_DASHDOTDOT 创建一支虚线和两点交替的画笔。只有当画笔宽度为1或更小(以设备单位计算)时才有效
PS_NULL 创建一支空画笔。
PS_INSIDEFRAME 创建一支画笔,该画笔在Windows GDI输出函数所产生的封闭形状的框架内画线,此输出函数指定一个限定矩形(例如,Ellipse,Rectangle,RoundRect,Pie和Chord成员函数),当此风格用于没有指定限定矩形的Windows GDI输出函数(例如LineTo成员函数)时,此画笔的绘制区域不受框架的限制。
2. NWidth:指定画笔的宽度。
宽度大于1个像素的画笔总是具有PS_NULL,PS_SOLED或PS_INSIDEFRAME风格。
3. CrColor:包含了画笔的RGB值。
例子:在视图的OnDraw(CDC *pDC)中加入:
CPen pen(PS_SOLID,2,RGB(122,122,122)) ;
PDC->SelectObject(&pen);
PDC->LineTO(100,100);
PDC->MoneTo(200,200);
如果画笔具有PS_INSIDEFRAME风格和某一不匹配逻辑调色板中颜色的颜色,则此画笔用一个混合色来进行绘制。PS_SOLID画笔风格不能用一个混合色来创建一支画笔。当画笔的宽度小于或等于1时,PS_INSIDEFRAME风格等同于PS_SOLID风格
2.
使用CreatePen,CreatePenIndirect或CreateStockObject成员函数来初始化所生成的CPen对象。
3.
BOOL CreatePen( int nPenStyle, int nWidth, COLORREF cfColor );
BOOL CreatePen( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL );
参数同上。
API函数:
HPEN CreatePen(
int fnPenStyle, // pen style
int nWidth, // pen width
COLORREF crColor // pen color
);
应用1:
CPen Pen;
Pen.CreatePen(
PS_DOT,0.5,RGB(100,100,100)
);
PDC->SelectObject(&pen);
PDC->Rectangle(0,0,200,200);
应用2:
HPEN hPen;
HPen = ::CreatePen(PS_DOT,0.5,RGB(100,100,100));
HDC hdc = ::GetDC(this->m_hWnd);
::SelectObject(hdc,hPen);
:: Rectangle(hdc,0,0,200,200);
::ReleaseDC(this->m_hWnd);
4.
BOOL CreatePenIndirect( LPLOGPEN lpLogPen );
LpLogPen:指向Windows LOGPEN结构,此结构包含了此画笔的信息
typedef struct tagLOGPEN { /* lgpn */
UINT lopnStyle;
POINT lopnWidth;
COLORREF lopnColor;
} LOGPEN;
当创建好画笔之后可以使用函数int GetLogPen( LOGPEN* pLogPen )或
int GetObject(
HGDIOBJ hgdiobj, // handle to graphics object of interest
int cbBuffer, // size of buffer for object information
LPVOID lpvObject // pointer to buffer for object information
);
来取得画笔的信息
下面以已经创建好的话笔来创建一只新的画笔:
LOGPEN logpen;
penExisting.GetLogPen( &logpen );
CPen penOther( PS_SOLID, 0, logpen.lopnColor );
5.
BOOL CreateStockObject( int nIndex );
API函数
HGDIOBJ GetStockObject(
int fnObject // type of stock object
);
主要有几种系统已经定义好的画笔
BLACK_PEN,DC_PEN,WHITE_PEN