第9章文本图形输出.ppt

上传人:本田雅阁 文档编号:2578950 上传时间:2019-04-11 格式:PPT 页数:31 大小:288.01KB
返回 下载 相关 举报
第9章文本图形输出.ppt_第1页
第1页 / 共31页
第9章文本图形输出.ppt_第2页
第2页 / 共31页
第9章文本图形输出.ppt_第3页
第3页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第9章文本图形输出.ppt》由会员分享,可在线阅读,更多相关《第9章文本图形输出.ppt(31页珍藏版)》请在三一文库上搜索。

1、第9章 文本、图形输出,Windows图形设备接口GDI(Graphic Device Interface)提供了在Windows下绘图的基本功能。想要在Windows应用程序窗口中显示图形,必须使用GDI中的函数。而所有的绘制操作都是通过设备描述表进行的。Windows设备描述表DC(device contexts),是对各种不同设备的抽象,应用程序只要向DC输出,由DC负责处理不同设备的差异。本章将介绍Visual C+中,有关图形、文本输出显示的相关知识。,9.1 基础知识,图形设备接口(GDI)和设备的驱动程序实现了设备无关性的图形的显示,而设备描述表(DC)则用来确定GDI输出的位置

2、和形象的属性。,9.1.1 GDI绘图的实现,图形设备接口(GDI)可理解为一个可执行程序,它处理来自Windows应用程序的图形函数调用,然后把这些调用传递给合适的设备驱动程序,由设备驱动程序来执行与硬件相关的函数,并产生最后的输出结果。GDI可以看作是一个应用程序与输出设备之间的中介,一方面,GDI向应用程序提供了一个设备无关的编程环境,另一方面,它又以设备相关的格式和具体的设备打交道。,9.1.2 MFC图形对象类,Windows提供了多种用于在设备描述表中进行绘制的图形对象,如画笔、位图、调色板、区域、路径等。MFC对Windows中的这些图形对象进行了封装,提供了等同于它们的图形对象

3、类。(具体内容请参照本书),9.1.3 库存GDI对象,Windows预定义了一些标准GDI对象,供系统和程序使用,称为库存GDI对象,它们可为多个程序同时使用。库存GDI对象包括最常用的字体、画笔、画刷等,,9.1.4 与图形绘制有关的简单数据类型,在详细介绍使用设备描述表和GDI对象实现图形输出之前,首先介绍几个常用的与图形绘制有关的数据结构类。 1CPoint类 2CSize类 3CRect类 4RGB宏,9.1.5 MFC应用程序框架中的图形绘制与刷新,在Windows应用程序中,通常在绘制图形之前调用BeginPaint函数,然后在设备描述表中进行一系列的绘制操作,最后调用EndPa

4、int函数结束绘制。MFC类CPaintDC封装了这一过程。在构造CPaintDC对象的同时,其构造函数自动调用BeginPaint函数;在消毁CPaintDC对象的同时,其析构函数自动调用EndPaint函数。,9.2 MFC设备描述表CDC类,在MFC中,CDC类封装了设备描述表(DC),该类的核心是m_hDC,代表一个指向窗口DC的句柄。具体使用时,MFC提供了几个常用的CDC类的派生类:CPaintDC、CClientDC和CWindowDC,它们的用法有着细微的差别。,9.2.1 CDC及其派生类,CDC类派生自CObject,它具有CObject类的共同特性,如可以动态创建,可进行

5、序列化操作。CDC类既包括了设备属性又包括了绘图方法,通过此方法可以实现GDI的所有图形输出。,9.2.2 文本输出,输出文本一般使用CDC:TextOut函数,它可以输出单行的文本,原型如下: BOOL TextOut( int x, int y, const CString& str ) 参数x和y为文本的输出位置坐标,参数str为要输出的文本内容。,9.2.3 CDC的常用绘图函数,CDC类中提供了很多绘图函数,可以通过这些函数绘制点、线、矩形、圆、多边形等。,9.3 使用画笔和画刷进行绘图,在Windows作图中,画笔和画刷是使用最多的GUI对象。绘制图形时,画笔负责绘制图形区域的边界

6、,而画刷负责填充其内部区域。,9.3.1 画笔对象及其使用,MFC类CPen封装了GDI中的画笔对象,画笔对象代表了进行绘制时所用的线条。,9.3.2 使用画笔绘图实例,下面给出一个使用不同类型画笔绘制图形的实例。通过本实例掌握画笔对象的使用和使用图形函数绘制图形。,9.3.3 画刷对象及其使用,刷子对象用来在GDI输出时填充一个封闭图形的内部,如当画圆形或方形时,系统会用当前的刷子对内部进行填充。MFC类CBrush封装了标准的Windows刷子对象。 创建画刷时,通常先定义一个CBrush对象,然后调用CreateSolidBrush、CreateaHatchBrush或CreatePat

7、ternBrush函数之一来定义画刷对象的属性。,9.3.4 使用画刷绘图实例,下面给出一个使用不同类型画刷绘制图形的实例,通过本实例掌握画刷对象的使用。(具体内容请参照本书),9.4 字体对象,MFC类CFont封装了Windows图形设备接口中的字体对象。字体对象决定的设备上下文中进行文本输出的字符样式。,9.4.1 字体对象的创建,在使用字体对象的时候,一般先创建一个CFont对象,然后调用CreateFont、CreateFontIndirect和CreatePointFont之一的成员函数来对该字体对象进行初始化。,9.4.2 获取字体信息,对于正在使用的字体,有时候需要获取字体的相

8、关信息,如字体的高度、宽度、浓淡等,CDC类提供了GetTextMetrics函数来获取字体的相关信息。 BOOL GetTextMetrics(LPTEXTMETRIC lpMetrics ) const;,9.4.3 字体对象使用实例,下面给出一个使用字体对象创建字体进行文本输出的实例。通过本实例掌握字体对象的创建和使用以及字体信息的获取。 启动Visual C+6.0,利用AppWizard创建一个基于单文档的MFC应用程序“Ch9Demo5”,,9.5 位图和区域对象,使用Visual C+进行图形图像输出及其相关的操作中,位图和区域对象也经常用到。本节将围绕这三个对象的具体应用进行讨

9、论。,9.5.1 设备相关位图(DDB),Windows中图像的显示一般是将预先准备好的图像复制到显示区域中,这样便于提高图像的显示速度。Windows提供了两种使用图形拷贝的方法:通过设备相关位图(DDB)和设备无关位图(DIB)。(具体内容请参照本书),9.5.2 CBitmap应用实例,下面给出一个使用CBitmap对象实现在客户窗口中进行位图显示的实例。通过本实例掌握CBitmap对象的创建和以及位图显示的方法。 启动Visual C+6.0,利用AppWizard创建一个基于单文档的MFC应用程序“Ch9Demo6”。利用上节介绍的方法,向工程添加位图资源“IDB_BITMAP1”,

10、将已有的图形文件“飞机4.bmp”导入。,9.5.3 设备无关位图(DIB),针对DDB的不足,从Windows 3.0开始引入了与设备无关的位图(DIB),提供了适用于交换的图像格式。此种格式的位图特点是:它自带颜色信息,因此是设备无关的,它通常以BMP为文件扩展名。,9.5.4 区域对象(CRgn),区域是指一个矩形、椭圆形、多边形,或者两个及两个以上图形的组合图形。它可以被填充、涂色、反转、执行击中测试(测试光标的位置)等。,9.5.5 CRgn应用实例,下面给出一个CRgn对象的应用实例。本实例将创建一个椭圆区域和一个多边形区域,而后通过区域操作获取其交集和交集以为的区域,分别用不同的

11、画刷填充。当鼠标在这两个区域单击左键时,分别给出不同的提示信息。,9.6 坐标系统与映射模式,到现在为止,前面所有的图形输出都是以像素为单位,相对于客户区的左上角的坐标系统,这是默认的方式。Windows提供了几种映射模式,每一种映射都对应着一种坐标系统,本节将详细介绍有关坐标系统与映射模式的使用。,9.6.1 坐标系统,GDI绘图操作实际上用到了两种类型的坐标系统:逻辑坐标和物理坐标(也称为设备坐标)。,9.6.2 映射模式,映射模式定义了Windows如何将GDI函数中指定的逻辑坐标映射为物理坐标。Windows默认的映射模式为MM_TEXT映射模式。在这样的坐标系统中,向右的方向为x轴的

12、正方向,向下的方向为y轴的正方向。无论是x方向还是y方向,每一个单位长度都代表设备上的一个像素。(具体内容请参照本书),9.6.3 自定义映射模式,在很多情况下,使用系统预定义的映射系统非常的恰当,但有时也需要用户自己定义映射模式更为方便。如编写一个绘制函数图形的应用程序,把整个屏幕映射为一个平面直角坐标系会更加的恰当。 使用如下函数调用就可以指定自定义的映射模式: dc.SetMapMode(MM_ANISOTROPIC); (具体内容请参照本书),9.6.4 坐标映射使用实例,下面给出一个坐标映射的使用实例。通过自定义映射模式,将客户窗口映射为一个平面直角坐标系,即原点在客户区中心,原点向左为X轴负方向,原点向上为Y轴正方向。在客户窗口绘制一条正弦曲线,幅度为客户区高度的一半,显示四个周期。实现如下: 启动Visual C+6.0,利用AppWizard创建一个基于单文档的MFC应用程序“Ch9Demo8”,(具体内容请参照本书),

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1