实验1、MFC绘制函数

实验1、MFC绘制函数

实验目的:利用MFC的绘制函数,实现利用鼠标左键的抬起和落下、绘制线段、矩形和圆形,并修改画笔颜色粗细,以及给矩形、圆形进行颜色填充。

1、绘制直线

① 在【解决方案资源管理器】中,点击【头文件】中的testView.h;
testView头文件
在testView.h头文件中定义绘制的起点P0和终点P1;
编写代码:

CPoint P0, P1;

设置起点和终点
② 点击【项目】中的【类向导】;
(VC6.0的类向导在【查看】的【查看类向导】中)
类向导
在类向导中,【类名】选择CtestView,在【消息】中找到WM_LBUTTONDOWN和WM_LBUTTONUP,点击【添加处理程序】,添加处理程序后函数名变成OnLButtonDown和OnLButtonUp,然后点击【编辑代码】
添加WM_LBUTTONDOWN和WM_LBUTTONUP消息
③ 把鼠标左键按下时的点,赋值给P0;
编写代码:

P0 = point;

OnLButtonDown

  • 把鼠标左键弹起时的点赋值给P1;
  • 利用MoveTo()和LineTo()绘制直线:因为OnLButtonUp中没有pDC调用这两个函数,所以首先定义一个pDC,通过GetDC()给它赋值;这样就可以调用MoveTo()和LineTo()这两个函数来画线了。
  • 最后用ReleaseDC()来释放pDC。

编写代码:

P1 = point;
CDC* pDC = GetDC();
pDC->MoveTo(P0);
pDC->LineTo(P1);
ReleaseDC(pDC);

OnLButtonUp

这样就可以直接运行了,快捷键是Ctrl+F5,可以在窗口中拖动鼠标绘制直线了。
线段

2、修改画笔颜色

接下来是对画笔进行应用:

  • 1、在OnLButtonUp中创建画笔,命名为NewPen;
  • 2、用CreatePen()设置画笔的属性,分别是:画笔的线型是实线PS_SOLID、画笔宽度为3、颜色为RGB值红色;
  • 3、用SelectObject()将画笔选入了设备描述表;
  • 4、最后用DeleteObject()删除画笔NewPen。

编写代码:

CPen NewPen, * pOldPen;
NewPen.CreatePen(PS_SOLID,3,RGB(255,0,0));
pOldPen = pDC->SelectObject(&NewPen);

NewPen.DeleteObject();

【SelectObject()】
把一个对象(位图、画笔、画刷等)选入指定的设备描述表。新的对象代替同一类型的老对象。

修改线型

这样修改之后,重新运行,会发现线条的颜色变成了红色,另外线条的宽度也变宽了。
运行结果

3、绘制矩形

还可以在该代码的基础上继续做更改:
既然可以通过P0、P1两个点绘制直线,那么同样的,P0、P1两个点也可以作为矩形的对角点、来绘制矩形。

  • 1、在OnLButtonUp中将MoveTo()和LineTo()绘制直线的代码注释掉;
  • 2、用Rectangle()绘制矩形。

编写代码:

//将之前绘制直线的代码注释掉
/*pDC->MoveTo(P0);
pDC->LineTo(P1);*/
pDC->Rectangle(CRect(P0,P1));

绘制矩形

运行后,就可以在窗口绘制矩形了(此时后绘制的矩形会覆盖、遮住先绘制的矩阵)
运行结果

4、绘制椭圆

同样的思路,P0、P1这两个点也可以作为椭圆外接矩形的对角点:

椭圆外接矩形:包围椭圆的最小矩形

直接将Rectangle()改成Ellipse()就可以了。
编写代码:

pDC->Ellipse(CRect(P0, P1));

绘制圆形

这样就可以运行、绘制椭圆了(同样上面的椭圆会把下面的椭圆遮住,说明矩形和椭圆都是能够填充的,而且默认的填充色是白色)
运行结果

5、填充颜色

用画刷能够填充封闭物体,这里使用画刷来填充椭圆:

  • 1、新建画刷,命名为NewBrush;
  • 2、用CreateSolidBrush()设置画刷属性,颜色为绿色;
  • 3、用SelectObject()将画刷选入设备描述表后,再绘制椭圆进行填充,所以需要写在Ellipse()前面;
  • 4、最后用DeleteObject()删除画刷NewBrush。

编写代码:

CBrush NewBrush, * pOldBrush;
NewBrush.CreateSolidBrush(RGB(0, 128, 0));
pOldBrush = pDC->SelectObject(&NewBrush);

NewBrush.DeleteObject();

填充颜色

运行后发现椭圆被填充为绿色了,说明椭圆是能够被填充的;
另外椭圆的边界为红色、内部为绿色,说明画刷和画笔是互不影响的。
运行结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值