📄 sy0301.htm
字号:
<html>
<HEAD>
<TITLE>Visual C++与计算机接口</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=gb2312" >
</HEAD>
<body>
<font color="#0000FF">绘制图形</font>
<p>
(一)实验目的:<BR>
应用MFC的CDC类的不同绘图工具在窗口中绘图<BR>
(二)实验内容:<BR>
绘制如图中看到的图形<BR><BR>
<p align="center"><span style="FONT-SIZE: 9pt"><img height="339" width="776" alt="绘制图形" src="sy0301.jpg" ></span></p>
<p align="center"><span style="FONT-SIZE: 9pt">图1.3.1 用MFC可以绘制这些图形</span></p>
(三)实验方法:<BR><BR>
在Windows应用程序中绘图用一个设备环境完成,该设备环境定义用户在哪里绘图、用什么工具绘图以及采用什么绘图模式<BR>
设备环境取消了重复的参数调用,因而有助于简化Windows绘图工具<BR><BR>
1、创建一个设备环境<BR>
(1)如果处理一个WM_PAINT消息或在OnDraw函数中,系统会提供一个设备环境<BR>
(2)如果没有提供,则必须自己创建一个DC<BR>
CDC* pDC=pWnd->GetDC(); //创建一个用户区DC<BR>
CDC* pDC=pWnd->GetWindowsDC(); //创建一个包括整个窗口的DC<BR>
CDC *pDC=CDC::FromHandle(::GetDC(NULL)); //创建一个包括整个屏幕<BR>
对于自己创建的设备环境,用完后必须销毁它;否则,会发生资源泄漏<BR>
销毁一个设备环境,用: pWnd->ReleaseDC(pDC);<BR>
(3)也可以自己定义一个DC对象,它会自动销毁<BR>
CClientDC dc(this); //创建一个用户区DC<BR>
CWindowDC dc(CWnd*); //创建一个包括整个窗口的DC<BR><BR>
2、创建一个画笔<BR>
画笔用于绘制对象的边框以及直线和曲线<BR>
(1)在DC中缺省已经有一个画笔,可以直接使用<BR>
(2)当需要其他样子的画笔时,则需自己创建<BR>
CPen pen(线形,宽度,颜色);<BR>
例如: CPen pen(PS_SOLID,2,RGB(128,128,128));<BR>
线形包括 PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT 等<BR>
颜色通常用 RGB(红,绿,蓝)<BR>
(3)画笔创建以后,要选入设备环境才起作用<BR>
注意还要保存一个旧画笔的指针,以便以后能恢复它<BR>
CPen *pOldPen=pDC->SelectObject(&pen); //save old pen<BR>
(4)在绘图结束但DC销毁之前,恢复保存的旧画笔<BR>
pDC->SelectObject(&pOldPen);<BR>
(5)画笔不再使用以后,并不再被DC选中时,必须要销毁,避免资源泄露<BR>
pen.DeleteObject();<BR><BR>
3、创建一个画刷<BR>
画刷用来填充一个封闭图形对象(如矩形、椭圆)的内部区域<BR>
(1)在DC中缺省已经有一个画刷,可以直接使用<BR>
(2)当需要其他样子的画刷时,则需自己创建<BR>
CBrush brush(RGB(128,128,128); //corlor<BR>
(3)画刷创建以后,要选入设备环境才起作用<BR>
注意还要保存一个旧画刷的指针,以便以后能恢复它<BR>
CBrush *pOldBrush=pDC->SelectObject(&brush); //save old brush<BR>
(4)在绘图结束但DC销毁之前,恢复保存的旧画刷<BR>
pDC->SelectObject(&pOldBrush);<BR>
(5)画刷不再使用以后,并不再被DC选中时,必须要销毁,避免资源泄露<BR>
brush.DeleteObject();<BR><BR>
4、使用固有对象<BR>
Windows中已经定义好了一些画笔和画刷,可以直接选用:<BR>
Cpen *pOldPen=pDC->SelectStockObject(BLACK_PEN);<BR>
CBrush *pOldBrush=pDC->SelectStockObject(GRAY_BRUSH);<BR><BR>
5、用CDC类成员函数绘制图形<BR>
(1)用设备环境画一条直线,用:<BR>
pDC->MoveTo(5,5);<BR>
pDC->LineTo(25,25);<BR>
(2)绘制一个矩形,用:<BR>
pDC->Rectangle(CRect(5,55,50,85));<BR>
3) 绘制弧,用:<BR>
pDC->Arc(CRect(5,115,50,145),CPoint(5,115),CPoint(50,115));<BR>
4) 绘制圆角矩形,用:<BR>
pDC->RoundRect(CRect(5,185,50,215),CPoint(15,15));<BR>
5) 绘制椭圆或圆,用:<BR>
pDC->Ellipse(CRect(250,5,305,25));<BR>
6) 绘制饼图,用:<BR>
pDC->Pie(CRect(250,55,305,85),CPoint(250,55),CPoint(305,55));<BR>
7) 绘制一个外观与控件、弹出式和重叠窗口等同的窗口框架,用:<BR>
pDC->DrawEdge(CRect(250,115,305,145),EDGE_BUMP,BF_RECT);<BR>
8) 绘制一系列相临的线,用:<BR>
POINT pt[8];<BR>
pt[0].x=495;<BR>
pt[0].y=5;<BR>
pt[1].x=510;<BR>
pt[1].y=10;<BR>
pt[2].x=515;<BR>
pt[2].y=12;<BR>
pt[3].x=495;<BR>
pt[3].y=15;<BR>
pt[4].x=550;<BR>
pt[4].y=25;<BR>
pDC->Polyline(pt,5);<BR><BR>
各个函数的参数含义请参阅MSDN文档<BR>
CDC的其他功能、绘图函数、绘图对象请参阅MSDN文档<BR>
<p></p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -