CPen

来源:互联网 发布:阿里云备案查询系统 编辑:程序博客网 时间:2024/05/03 04:39

简介

  画笔是绘图的基本工具,在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, 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创建的例子

  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);\\将以前的画笔选入设备描述表
原创粉丝点击