[GDI绘图]画笔CPen

  1. CPen类
CPen画笔是一种用来画线及绘制有形边框的工具,用户可以指定它的颜色及厚度,并且可以指定它画实线、点线或虚线。

CPen类,该类封装了Windows图形设备接口(GDI)画笔,主要通过构造函数来创建绘图对象。

  1. 函数说明

CPen类的构造函数有3个,分别如下:

// Create methods
HPEN CreatePen(int nPenStyle, int nWidth, COLORREF crColor)
HPEN CreatePen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL)
HPEN CreatePenIndirect(LPLOGPEN lpLogPen)

HPEN CreatePen(int nPenStyle, int nWidth, COLORREF crColor)

创建画笔函数带有3个参数,nPenStyle设置线形,nWidth设置线宽,crColor设置线的颜色

画笔线型参数说明
参数注释
PS_SOLID实线画笔
PS_DASH虚线画笔,只有当画笔宽度小于等于1个设备单位时才有效
PS_DOT点画笔,只有当画笔宽度小于等于1个设备单位时才有效
PS_DASHDOT虚线点画笔,只有当画笔宽度小于等于1个设备单位时才有效
PS_DASHDOTDOT创建一个双点线画笔,只有当画笔宽度小于等于1个设备单位时才有效
PS_NULL空线画笔
PS_INSIDEFRAME创建一个内框线画笔,该画笔可以在Windows GDI输出函数定义的矩形边界所生成的封闭状的边框内绘制直线
// 创建实线画笔
CPen solidPen;
solidPen.CreatePen(PS_SOLID, 1, RGB(0x99, 0x99, 0x99));
// 绘制一条直线
HGDIOBJ hOld = ::SelectObject(hDC, (HGDIOBJ)solidPen);
::MoveToEx(hDC, 0, 0, nullptr);
::LineTo(hDC, 100, 100);
::SelectObject(hDC, hOld);

// 创建虚线画笔
 CPen dotPen;
 dotPen.CreatePen(PS_DOT, 1, RGB(0xCC, 0xCC, 0xCC));
 dc.SelectPen(dotPen);
// ToDo: 绘制形状

HPEN CreatePen(int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0, const DWORD* lpStyle = NULL)

创建画笔函数带有5个参数,nPenStyle设置线形,nWidth设置线宽,pLogBrush设置画刷,nStyleCount指定lpStyle矩阵的长度(如果参数nPenStyle的值不是PS_USRSTYLE,则该参数值必须是0),lpStyle设置自定义风格直线段的长度

// 设置一个宽度为2,实线和白线分别是32和8,的虚线矩形画刷
LOGBRUSH logBrush;
logBrush.lbStyle = BS_SOLID;              // 线的类型
logBrush.lbColor = RGB(0xCC, 0xCC, 0xCC); // 线的颜色
DWORD lpStyle[] = { 32, 8, 0};            // 虚线和白线比例,也可以多设置几个
CPen pen;
pen.CreatePen(PS_USERSTYLE | PS_GEOMETRIC | PS_ENDCAP_SQUARE, 2, &logBrush, 2, lpStyle);

// 绘制一条宽度为2的虚线
HGDIOBJ hOld = ::SelectObject(hDC, (HGDIOBJ)pen);
::MoveToEx(hDC, 0, 0, nullptr);
::LineTo(hDC, 100, 100);
::SelectObject(hDC, hOld);

  • 10
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值