4.3使用画刷绘图

4.3.1简单画刷

MFC中提供了一个CBrush类,可以用来创建画刷对象。

void CTestView::OnLButtonUp(UINT nFlags, CPoint point) 
{
 // TODO: Add your message handler code here and/or call default
 CBrush brush(RGB(255,0,0));
 CClientDC dc(this);
 dc.FillRect(CRect(m_ptOrigin,point),&brush);
 CView::OnLButtonUp(nFlags, point);
}

4.3.2位图画刷

CBrush类有这样一种构造函数:
CBrush( CBitmap* pBitmap );
CBitmap是一个位图类。创建CBitmap对象时,还需要利用LoadBitmap函数来加载一幅位图。
BOOL LoadBitmap( LPCTSTR lpszResourceName );
BOOL LoadBitmap( UINT nIDResource );
第一种以位图名形式加载,第二种是以资源ID形式加载。

第二种需要以资源ID来加载位图,首先为程序增加一个位图资源:
Insert菜单下->Resource->Bitmap资源,单击New,即可创建一个IDB_BITMAP1的位图资源,双击位图资源就可以利用位图编辑器来编辑位图。

另一种为程序增加位图资源的方法:
就是利用工具栏上面的资源工具栏按钮。

void CTestView::OnLButtonUp(UINT nFlags, CPoint point) 
{
 // TODO: Add your message handler code here and/or call default
 //CBrush brush(RGB(255,0,0));
 CBitmap bitmap;
 bitmap.LoadBitmap(IDB_BITMAP1);
 CBrush brush(&bitmap);
 CClientDC dc(this);
 dc.FillRect(CRect(m_ptOrigin,point),&brush);
 CView::OnLButtonUp(nFlags, point);
}

4.3.3透明画刷

之前我们创造的画刷,会覆盖其他的,因此我们创建一个透明画刷(非白色画刷)
GetStockObject获取一个画刷句柄,返回类型是HGDIOBJECT,需要进行强制类型转换;进行绘制要求一个画刷对象,所以需要调用FromHandle函数将画刷句柄转变成画刷对象。

void CTestView::OnLButtonUp(UINT nFlags, CPoint point) 
{
 // TODO: Add your message handler code here and/or call default
  CClientDC dc(this);
 CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
 //将空画刷选入设备描述表,因为之前是指针类,所以前面不用加&
 CBrush *pOldBrush=dc.SelectObject(pBrush);
 //画一个矩形
 dc.Rectangle(CRect(m_ptOrigin,point));
 //恢复之前的画刷
 dc.SelectObject(pOldBrush);
 CView::OnLButtonUp(nFlags, point);
}

4.3.4静态成员函数

静态成员函数与静态成员变量属于类本身,可以通过类名::函数名或者类名::变量名,非静态成员变量和非静态成员函数,通过类的对象去引用。

4.4连续绘制线条

首先为CTestView添加鼠标移动消息(WM_MOUSEMOVE)的响应函数。
然后添加一个类成员变量(BOOL类型),鼠标左键按下为真,弹起来为假。在CTestView类的构造函数中先设置为假。

void CTestView::OnMouseMove(UINT nFlags, CPoint point) 
{
 // TODO: Add your message handler code here and/or call default
 CClientDC dc(this);
 if(m_bDraw==true)
 {
  dc.MoveTo(m_ptOrigin);
  dc.LineTo(point);
  m_ptOrigin=point;
 }
 CView::OnMouseMove(nFlags, point);
}

该函数的第二个参数就是当前鼠标的坐标,最开始是左键按下的位置。

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

身影王座

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

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

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

打赏作者

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

抵扣说明:

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

余额充值