MFC——画笔和画刷

MFC——画笔和画刷

一、画笔

1、创建画笔对象

  • MFC 中可以使用CPen创建画笔对象,其构造函数如下:
    CPen(
    	int nPenStyle,	//指定画笔样式
    	int nWidth,	//指定画笔的宽度
    	COLORREF crColor	//指定画笔样式
    )
    CPen(
    	int nPenStyle,	//指定画笔样式
    	int nWidth,	//指定画笔的宽度
    	const LOGBRUSH* pLogBrush,	//指定 LOGBRUSH 结构
    	int nStyleCount = 0,	//指定双字节单位的 lpStyle 数组长度
    	const DWORD* lpStyle = NULL	//指向双字节值的指针
    )
    
  • 其中,nPenStyle 参数指定画笔样式,有效取值如下表:
    意义
    ps_SOLID创建实线画笔
    PS_DASH创建虚线画笔,此值只有当画笔宽度等于或小于1时才有效
    PS_DOT创建点线画笔,此值只有当画笔宽度等于或小于1时才有效
    PS_DASHDOT创建虚点线画笔,此值只有当画笔宽度等于或小于1时才有效
    PS_DASHDOTSOT创建双点虚线画笔,此值只有当画笔宽度等于或小于1时才有效
    PS_NULL创建空白画笔
    PS_INSIDERFRAME创建封闭形状内线的画笔
    PS_GEOMETRIC创建几何画笔
    PS_COSMETIC创建装饰画笔
    PS_ALTERNATE创建设置每个像素的画笔,此类型只能应用于装饰画笔
    PS_USERSTYLE创建用户自定义的画笔
  • 线点结束部分的有效取值如下表:
    意义
    PS_ENDCAP_ROUND结束部分是圆形
    PS_ENDCAP_SQUARE结束部分是方形
    PS_ENDCAP_FLA结束部分是平滑
  • 连接点的有效取值如下表:
    意义
    PS_JOIN_BEVEL连接部分是斜角
    PS_JOIN_MITER连接部分在指定值内是连接,否则是斜角
    PS_JOIN_ROUND连接部分是圆形

2、画笔示例

  • 示例代码如下:
    void CGDISampleView::OnMenuitemPen()
    {
    	// TODO: 在此添加命令处理程序代码
    	CDC *pDC = GetDC();
    	CPen newPen;
    	if (newPen.CreatePen(PS_SOLID, 2, RGB(255, 0, 0)))
    	{
    		CPen* pOldPen = pDC->SelectObject(&newPen);
    		RECT rect;
    		GetClientRect(&rect);
    		pDC->MoveTo(rect.left, rect.top);
    		pDC->LineTo(rect.right, rect.top);
    		pDC->LineTo(rect.left, rect.bottom);
    		pDC->LineTo(rect.right, rect.bottom);
    		pDC->LineTo(rect.left, rect.top);
    		pDC->SelectObject(pOldPen);
    	}
    	else
    		MessageBox(L"创建画笔失败");
    }
    
  • 效果如下:
    在这里插入图片描述

二、画刷

1、创建画刷对象

  • MFC 中使用 CBrush 来创建画刷对象,其构造函数如下:
    CBrush(COlORREF crColor)	//指定画刷的 RGB 前景颜色
    CBrush(int nIndex, COLORREF crColor)	//指定画刷填充的样式
    CBrush(CBitmap* pBitmap)	//指定画刷用于绘制的位图对象的指针
    
  • nIndex 的有效取值如下表:
    意义
    HS_BDIAGONAL以左下角到右上角 45° 的线填充画刷
    HS_CROSS以十字交叉线填充画刷
    HS_DIAGCROSS以互相交互 45° 线填充画刷
    HS_FDIAGONAL以左上角到右下角 45° 的线填充画刷
    HS_HORIZONTAL以水平线填充画刷
    HS_VERTICAL以垂直线填充画刷
  • CBrush 除了上面三个有参构造函数,还有一个无参构造函数。灭有参数的构造函数不能进行初始化,在使用前必须使用创建函数对画刷进行初始化。CBrush 提供如下的 6 个创建函数:
    • 1)CreateSolidBrush() 函数:用于创建实画刷,即以指定的纯色填充区域。
    • 2)CreateHatchBrush() 函数:用于创建纹理画刷,可以创建指定颜色的纹理画刷。
    • 3)CreateBrushIndirect() 函数:使用在 LOGBRUSH 结构中指定样式、颜色和模式初始化画刷。
    • 4)CreatePatternBrush() 函数:创建带有位图的画刷。
    • 5)CreateDIBPatternBrush() 函数:使用设备相关位图创建画刷。
    • 6)CreateSysColorBrush() 函数:使用系统默认颜色的画刷。

2、画刷示例

  • 示例代码如下:
    void CGDISampleView::OnMenuitemBrush()
    {
    	// TODO: 在此添加命令处理程序代码
    	CDC* pDC = GetDC();
    	CBrush newBrush;
    	if (newBrush.CreateSolidBrush(RGB(100, 250, 255)))
    	{
    		RECT rect;
    		GetClientRect(&rect);
    		CRgn rgn;
    		rgn.CreateEllipticRgn(rect.left + 10, rect.top, rect.right - 10, rect.bottom);
    		pDC->FillRgn(&rgn, &newBrush);
    	}
    	else
    		MessageBox(L"创建画刷失败!");
    }
    
  • 运行效果如下:
    在这里插入图片描述

3、创建含有位图的画刷

  • 示例代码如下:
    void CGDISampleView::OnMenuitemBitmapbrush()
    {
    	// TODO: 在此添加命令处理程序代码
    	CDC* pDC = GetDC();
    	CRect rect;
    	GetClientRect(&rect);
    	rect.top = rect.Height() / 4;
    	rect.bottom = rect.top * 3;
    	rect.left = rect.Width() / 4;
    	rect.right = rect.left * 3;
    	CBitmap bitmap;
    	if (!bitmap.LoadBitmap(IDB_BITMAP2))
    		return;
    	CBrush newBrush;
    	if (newBrush.CreatePatternBrush(&bitmap))
    		pDC->FillRect(&rect, &newBrush);
    	else
    		MessageBox(L"创建位图画刷失败!");
    }
    
  • 运行效果如下:
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

御承扬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值