MFC经典绘图(清华大学)课件

上传人:我*** 文档编号:144942871 上传时间:2020-09-14 格式:PPT 页数:31 大小:1.25MB
返回 下载 相关 举报
MFC经典绘图(清华大学)课件_第1页
第1页 / 共31页
MFC经典绘图(清华大学)课件_第2页
第2页 / 共31页
MFC经典绘图(清华大学)课件_第3页
第3页 / 共31页
MFC经典绘图(清华大学)课件_第4页
第4页 / 共31页
MFC经典绘图(清华大学)课件_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《MFC经典绘图(清华大学)课件》由会员分享,可在线阅读,更多相关《MFC经典绘图(清华大学)课件(31页珍藏版)》请在金锄头文库上搜索。

1、MFC绘图,9/14/2020,2,MFC编程学习的基本目标,可以进行简单的基于MFC的图形界面编程 理解Windows编程的基本概念。 鉴于教学时间进度限制,更复杂的应用程序开发通过自学完成。 实现基本MFC应用程序需要掌握如下内容: Windows编程基本概念 文档/视图结构 文档读写 对话框及标准控件的使用 菜单栏的使用 绘图及鼠标消息的处理,9/14/2020,3,主要内容,GDI与设备环境(DC) 用CDC绘图 应用举例 绘图工具类,9/14/2020,4,图形设备接口(GDI),Windows提供了一个称为图形设备接口(Graphics Device Interface,GDI)的

2、抽象接口。 GDI 作为Windows的重要组成部分,负责管理用户绘图操作时功能的转换。 用户通过调用GDI 函数与设备打交道,GDI 通过不同设备提供的驱动程序将绘图语句转换为对应的绘图指令,避免了用户对硬件直接进行操作,从而实现设备无关性(显示器或打印机)。,9/14/2020,5,GDI的图形输出,应用程序可以使用GDI 创建如下图形输出 矢量图形:画线和填充图形,包括点、直线、曲线、多边形、扇形和矩形等。 光栅图形:通过光栅图形函数对以位图形式存储的数据进行操作,包括各种位图和图标的输出。 屏幕:对若干行和列的像素操作 打印机:对若干行和列的点阵输出 直接从内存到显存的复制操作,速度快

3、,内存要求高。 文本:以图形方式输出文本,以逻辑坐标为单位计算输出位置,而DOS是以行为单位。用户可以设置文本的各种效果,如加粗、斜体、设置颜色等。,9/14/2020,6,设备环境,应用程序的输出面向设备环境(Device Context,DC),是一个虚拟逻辑设备,也称设备描述表或设备上下文。设备环境DC 是由GDI 创建,用来代表设备连接的数据结构。 DC 的主要功能 允许应用程序使用一个输出设备。 提供应用程序、设备驱动和输出设备之间的连接。 保存当前信息,例如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜色和背景等影响图形输出的绘图模式。 保存窗口剪切区域(Clipping

4、Region),限制程序输出到输出设备中窗口覆盖的区域。,9/14/2020,7,设备坐标系统,设备坐标系统 x轴自左至右,y轴从上到下,坐标原点在屏幕左上角,0,0,X,Y,O,9/14/2020,8,主要内容,GDI与设备环境(DC) 用CDC绘图 应用举例 绘图工具类,9/14/2020,9,设备环境类CDC,MFC封装了DC,提供CDC 类及它的子类以访问GDI。 CDC类派生自CObject类,其子类包括 CClientDC CMetaFileDC CPaintDC CWindowDC,9/14/2020,10,设备环境类的基本功能,9/14/2020,11,CDC类常用绘图函数,A

5、rc:绘制一段弧 Chord:绘制弦形 Ellipse:绘制椭圆或圆 MoveTo:将当前位置移动到指定位置 LineTo:从当前位置到指定位置画一条直线 Polyline:画连接指定点的折线段 PolyBezler:根据两个端点和两个控制点画贝塞尔曲线 Pie:画冰块 Polygon:根据两个或两个以上的顶点绘制一个多边形 Rectangle:根据指定的左上角和右下角坐标绘制一个矩形 RoundRect:画圆角矩形 SetPixel:画一个点,9/14/2020,12,绘图颜色,DWORD类型的COLORREF数据用于存放颜色值“0 x00bbggrr” 低位字节存放红色强度值 第2 个字节

6、存放绿色强度值 第3个字节存放蓝色强度值 高位字节存放0 可用RGB宏设置颜色值,将红、绿、蓝分量值转换为COLORREF类型的颜色数据 COLORREF RGB( BYTE byRed, / red component of color BYTE byGreen, / green component of color BYTE byBlue / blue component of color );,9/14/2020,13,常用颜色对照表,例:COLLORREF red = RGB(255,0,0);,9/14/2020,14,在MFC中获取DC,在如OnDraw等函数中传递一个指向CDC

7、对象的指针 如OnDraw(CDC* pDC); 使用构造函数构建对象 一般不构造CDC对象 在CWnd类的OnPaint函数中,定义CPaintDC对象 CPaintDC dc(this); 在CWnd类的其它函数中,定义CClientDC和CWindowDC的对象 CClientDC dc(this); CWindowDC dc(this);,9/14/2020,15,CClientDC、CPaintDC和CWindowDC的区别,当窗口的某个区域需要重绘时激发窗口重绘消息WM_PAINT,相应消息处理函数CWnd:OnPaint将被调用。CPaintDC一般只用于OnPaint函数中,在

8、处理完窗口重绘后, CPaintDC对象的析构函数把WM_PAINT消息从消息队列中清除,避免不断地重绘操作。坐标原点(0,0)是客户区的左上角。 CClientDC用于特定窗口客户区(窗口中除边框、标题栏、菜单栏、状态栏外的中间部分)的输出,其构造函数中包含了GetDC,析构函数中包含了ReleaseDC,不需要显式释放DC资源。一般用于响应非重绘消息(如键盘和鼠标消息)的绘图操作。坐标原点(0,0)是客户区的左上角。 CWindowDC在整个应用程序窗口上画图,而CClientDC和CPaintDC只能在客户区绘制图形;除非要自己绘制窗口边框和按钮,否则一般不用它。坐标原点(0,0)是屏幕

9、的左上角。,9/14/2020,16,Windows系统发送WM_PAINT消息的时机 第一次创建一个窗口时 改变窗口的大小时 把窗口从另一个窗口背后移出时 窗口显示数据变化时,应用程序引发重绘操作 通过CWnd:Invalidate、CWnd:InvalidateRect或CWnd:InvalidateRgn函数把指定区域加到窗口的Update Region中。 窗口的Update Region不为空时,系统会自动产生WM_PAINT消息。,9/14/2020,17,OnDraw与OnPaint的区别,OnDraw是CView类的成员函数,不响应消息;OnPaint是CWnd类的成员函数,相

10、应WM_PAINT消息。 CView默认调用的OnPaint函数如下 void CView:OnPaint() CPaintDC dc(this); OnPrepareDC( /调用了OnDraw 可见OnPaint函数也调用了CView:OnDraw函数。因而一般在OnDraw函数内添加绘图代码,完成绘图任务,9/14/2020,18,主要内容,GDI与设备环境(DC) 用CDC绘图 应用举例 绘图工具类,9/14/2020,19,举例,编写一个单文档MFC应用程序,完成以下要求:(1)在客户区中画最大的椭圆,(2)当点击鼠标左键时,以鼠标左键点击的位置为中心,画一个半径为20个像素的圆。

11、建立一个单文档的MFC项目DrawTest1,9/14/2020,20,绘制椭圆方法一:修改CView类的虚函数OnDraw 函数CWnd:GetClientRect得到客户区域的大小,添加绘图代码,9/14/2020,21,绘制椭圆方法二:在OnPaint函数中添加绘图代码 添加WM_PAINT消息处理函数OnPaint 调用OnPrepareDC和OnDraw函数,添加绘图代码,需要添加的代码,9/14/2020,22,9/14/2020,23,鼠标点击消息处理函数,在类视图中选中CDrawTest1View类 在属性窗口中选择“WM_LBUTTONDOWN”消息,添加消息处理函数,需要添

12、加的代码,9/14/2020,24,9/14/2020,25,主要内容,GDI与设备环境(DC) 用CDC绘图 应用举例 绘图工具类,9/14/2020,26,绘图工具类主要包括画笔CPen、画刷Cbrush、字体CFont、位图Bitmap和调色板Cpalette等。 类继承关系如图,绘图工具类CGdiObject,9/14/2020,27,CPen类:GDI 画笔,用于画线。默认的画笔用于绘制与一个像素等宽的黑色实线。 CBrush类:GDI 画刷,用来填充一个封闭图形对象(如矩形、圆形)的内部区域,默认的画刷颜色是白色。 CFont类:GDI字体,用来绘制文本,可设置文字的大小、是否加粗

13、、是否斜体、是否加下划线等。 CBitmap类:GDI 位图,用于填充区域。 CPalette类:GDI 调色板,包含系统可用的色彩信息,是应用程序和彩色输出设备环境(如显示器)的接口。 CRgn类:GDI 区域,用于设备环境(通常是窗口)内的区域操作,通常和CDC类中与裁剪(clipping)有关的成员函数配合使用。,9/14/2020,28,阴影画刷 BOOL Cbrush:CreateHatchBrush( int nIndex, / 指定阴影样式 COLORREF crColor / 指定阴影颜色 ); 创建一个黄色的实心画刷 CBrush brush; brush.CreateHat

14、chBrush(HS_DIAGCROSS, RGB(255,255,0);,9/14/2020,29,在OnDraw函数中添加如下代码,运行结果如右图。,9/14/2020,30,使用预定义的画笔、画刷或字体,使用CDC类的SelectStockObject函数,可以使用预定义的画笔、画刷或字体 CGdiObject* SelectStockObject( int nIndex ); 如pDC- SelectStockObject(GRAY_BRUSH); nIndex的部分可取值如下(完整参数列表可参考MSDN) BLACK_BRUSH:黑色画刷 DKGRAY_BRUSH:深灰色画刷 GRAY_BRUSH:灰色画刷 HOLLOW_BRUSH:中空画刷,不做填充 LTGRAY_BRUSH:浅灰色画刷 NULL_BRUSH:无画刷,不做填充 WHITE_BRUSH:白色画刷 BLACK_PEN:黑色画笔 NULL_PEN:无画笔,不画线 WHITE_PEN:白色画笔 ANSI_FIXED_FONT:ANSI固定系统字体 DEVICE_DEFAULT_FONT:设备缺省字体,9/14/2020,31,小结,掌握基本绘图方法 掌握鼠标事件相应方法 掌握绘图工具的使用方法,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号