画笔的使用

来源:互联网 发布:巴宝莉高仿风衣淘宝店 编辑:程序博客网 时间:2024/04/29 17:44

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

原创粉丝点击