收藏 分享(赏)

3、图形与文.doc

上传人:hwpkd79526 文档编号:8098349 上传时间:2019-06-08 格式:DOC 页数:34 大小:48.50KB
下载 相关 举报
3、图形与文.doc_第1页
第1页 / 共34页
3、图形与文.doc_第2页
第2页 / 共34页
3、图形与文.doc_第3页
第3页 / 共34页
3、图形与文.doc_第4页
第4页 / 共34页
3、图形与文.doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、第 3 章 图形和文本输出3.1 图形设备接口和设备环境3.2 GDI 对象 CGdiObject3.3 画笔和画刷的使用 3.4 处理文本 3.5 位图3.6 应用实例1 什么是 GDI2 什么是 CDC、 CClientDC3 什么是 WM_PAINT 消息和 OnDraw()函数4 如何定义 CDC 对象5 常用的绘制图形、文字、图像的函数6 画笔、画刷、字体对象如何使用3.1 图形设备接口和设备环境 3.1.1 图形设备接口GDI 是 Windows 提供了的图形设备接口(Graphics Device Interface,GDI),使用GDI 编程实现在窗口上输出图形图像。GDI 负

2、责管理用户绘图操作时功能的转换,实现设备无关性。 应用程序可以使用 GDI 创建 3 种类型的图形输出:矢量图形、光栅图形和文本。1.矢量图形矢量图形输出是指画线和填充图形,包括点、直线、曲线、多边形、扇形和矩形等。通常所说的图形都是指矢量图形。2.光栅图形光栅图形输出是指光栅图形函数对以位图形式存储的数据进行操作,它包括各种位图和图标的输出。光栅图形一般称为图像。3.文本与 DOS 字符方式下输出文本不同,Windows 中的文本是按图形方式输出的。3.1.2 设备环境Windows 应用程序的输出不直接面向显示器或打印机等物理设备,而是面向一个称之为设备环境(Device Context,

3、DC)的虚拟逻辑设备。设备环境 DC,也称设备描述表或设备上下文。它是由 GDI 创建、用来代表设备连接的数据结构。DC 的主要功能有以下几种:(1) 允许应用程序使用一个输出设备。(2) 提供 Windows 应用程序、设备驱动和输出设备之间的连接。(3) 保存当前信息,例如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜色和背景等影响图形输出的绘图模式。(4) 保存窗口剪切区域,限制程序输出到输出设备中窗口覆盖的区域。3.1.3 设备环境类 GDI 和 DC 是 Windows 的接口,在 MFC 中,具体功能封装在 CDC 类,称为设备环境类。1. 设备环境类 CDC 及其功能CD

4、C 是所有设备环境类的基类,对 GDI 的所有绘图函数进行了封装CClientDC 是 CDC 类的派生类,代表窗口客户区的设备环境代表整个窗口的设备环境,包括客户区和非客户区2. 设备环境类 CDC 的一些常用函数Arc() Chord() Ellipse() LineTo() MoveTo()Ployline() Pie() Rectangle()3.1.4 颜色的设置Windows 用 COLORREF 类型的数据存放颜色,它是一个 32 位整数。任何一种颜色都是由红、绿、蓝 3 种基本颜色组成的,COLORREF 类型数据的低位字节存放红色强度值,第 2 个字节存放绿色强度值,第 3

5、个字节存放蓝色强度值,高位字节为 0,每一种颜色分量的取值范围为 0255。MFC 提供了 RGB 宏,用于设置颜色,其使用形式为:RGB(byRed,byGreen,byBlue) 其中参数 byRed、byGreen 和 byBlue 分别表示红、绿、蓝分量值(范围 0255) 。例: COLORREF color;color = RGB(128,0,200);3.1.5 获取设备环境 1.传统的 SDK 获取设备环境的方法(略)2. MFC 应用程序获取设备环境的方法,即创建 DC 对象的方法。1) 如果在 OnDraw 中,参数会传入一个 CDC 指针,直接使用。void CMyVie

6、w:OnDraw(CDC* pDC);2)如果不在 OnDraw 中,要创建和构造 CClientDC 对象CClientDC dc(this);注意:只有 CClientDC 可以用在 OnDraw()函数之外。3)CClientDC 对象可以定义为全局的或局部的,全局的如下例:在类中定义指针CClientDC *dc;在类的初始化函数中构造指针dc = new CClientDC(this);3.1.6 编程实例【例 3.1】 编写一个单文档的 MFC 应用程序 Li3_1,利用表 3-2 中的函数绘制几种常见的几何图形。当程序运行时,显示如图所示结果。【例 3.2】编写一个单文档的 MF

7、C 应用程序 Li3_2,使用 CPaintDC 类完成例 3.1 同样的功能。【例 3.3】 编写一个基于对话框的 MFC 应用程序 Li3_3,程序运行后,当用户在窗口中单击鼠标左键时,在窗口中绘制一个椭圆。 【例 3.4】编写一个基于对话框的 MFC 应用程序 Li3_4,使用3.2 其他 GDI 对象类输出图形时,除了使用 CDC 或 CClientDC 对象中的图形函数,还能够使用下面的类,统称为 GDI 对象类画笔类 CPen,绘制对象的边框以及直线和曲线。画刷类 CBrush,填充一个封闭图形对象内部区域字体类 CFont,用来绘制文本位图类 CBitmap,装载和操作位图调色板

8、类 CPalette,包含系统可用的色彩信息,是应用程序和彩色输出设备环境的接口3.3 画笔和画刷的使用 3.3.1 画笔什么是画笔?画笔是一个对象,定义了绘制图形时线条的类型、宽度和颜色,CDC 对象通过选择画笔对象,使用某个画笔。方法 1 使用库存画笔SelectStockObject (nMode);nMode BLACK_PEN /黑笔WHITE_PEN /白笔NULL_PEN /空笔例:在 OnDraw()中执行:pDC-SelectStockObject(BLACK_PEN);pDC-Ellipse(10,10,100,100);pDC 选用了一个黑色的笔画园。方法 2 使用笔对象

9、画笔类是 CPen 类,定义画笔对象,设置参数,然后应用于 DC 对象。(1)定义画笔对象CPen 笔对象(2)设置笔参数笔对象.CreatePen(笔模式, 笔宽度, 笔颜色) ;笔模式PS_SOLID 实线; PS_DASH 虚线,宽度必须为一;笔宽度 整数笔颜色 用 RGB 方式(3)应用画笔:DC 对象.SelectObject(笔对象);/将 pen 送到 DC,此函数返回先前的笔对象,以便恢复。例:在 OnDraw()中执行:CPen pen ;pen.CreatePen(PS_SOLID,4,RGB(255,0,0);pDC-SelectObject(pDC-Ellipse(10

10、,10,100,100);/pDC 选用了一个红色的、宽度 4 的、实线笔画园。【例 3.5】 编写一个单文档应用程序 Li3_5,使用库存画笔和画刷在视图中绘制图形。【例 3.6】 编写一个单文档应用程序 Li3_6,绘制不同样式、线宽及颜色的矩形。3.3.2 创建和使用画刷画刷是在画封闭曲线时用来填充的颜色,例如画圆形或方形时系统会用当前的刷子对内部进行填充。方法 1 使用库存的画刷pDC-SelectStockObject (nMode);nMode BLACK_BRUSHWHITE_ BRUSHGRAY_ BRUSHNULL_ BRUSH方法 2 使用画刷对象(1)定义画刷对象CBru

11、sh 画刷对象;(2)设置画刷参数(可以用以下方法之一)画刷对象.CreateSolidBrush(画刷颜色); 固定颜色刷子 画刷对象. CreateHatchBrush( 网格类型,颜色 ); 网格刷子网格类型:HS_BDIAGONAL HS_CROSSHS_DIAGCROSS HS_FDIAGONALHS_HORIZONTAL HS_VERTICAL (3)应用画刷:DC 对象.SelectObject(画刷对象);/将刷子送到 DC。例:在 OnDraw()中执行:CBrush bsh ;bsh.CreateHatchBrush (HS_CROSS,RGB(255,0,0);pDC-S

12、electObject(pDC-Ellipse(10,10,100,100);/pDC 选用了一个红色的、十字网格的刷子画园。【例 3.7】编写一个单文档应用程序 Li3_7,绘制不同颜色、不同阴影形式的填充矩形。补充:窗口定时器窗口 CWnd 允许安装定时器,安装后,系统将按设定的时间向窗口发 WM_TIMER 消息,窗口对应的映射函数为 OnTimer。利用定时器的特点,可以编写如动画效果的程序。SetTimer(n,1000,NULL);/安装定时器,并将其时间间隔设为 1000 毫秒KillTimer(n);/销毁定时器其中的 n 为第几个定时器,一般为 1。响应定时器的函数为 OnT

13、imer,可以在类向导中选 WM_ONTIMER 消息创建。void CMainFrame:OnTimer(UINT nIDEvent)/其中 nIDEvent 是定时器序号,即 nCTime time=CTime:GetCurrentTime(); /获取系统当前时间给 time 变量 CString sTime= time.Format(“%I:%M %S %p“); /时间值格式化复制给 sTime SetWindowText(sTime);/Invalidate();CFrameWnd:OnTimer(nIDEvent);3.4 处理文本3.4.4 常用文本输出函数MFC CDC 类中

14、常用的文本输出函数有以下几种:TextOut( )该函数使用当前设定的字体、颜色、对齐方式在指定位置上输出文本。vitual BOOL TextOut(int x,int y,LPCTSTR lpszString,int nCount); 或:BOOL TextOut(int x, int y,const Cstring 其中,参数(x,y)指定输出文本串的开始位置;参数 lpszString 和 str 为输出的文本串;参数 nCount 指定文本串的长度。3.4.1 设置文本显示属性 在默认情况下输出文本时,字体颜色是黑色,背景颜色是白色,背景模式为不透明模式。通过调用 CDC 类成员函数

15、重新设置字体颜色、背景颜色和文本对齐方式等文本显示属性,下表是文本属性显示的常用函数。文本属性函数 1.设置背景模式int SetBkMode(int nBkMode);其中,nBkMode 指定背景模式,其值是 OPAQUE(不透明) 或 TRANSPARENT(透明)。2.设置文本对齐方式SetTextAlign( )函数改变文本对齐方式:UINT SetTextAlign(UINT nFlags);其中,nFlag 为下表中列出的标志的组合。文本对齐标志 3.4.2 设置字体字体也是一种 GDI 对象,字体对象的创建、选择、使用和删除的步骤与其他 GDI对象类似。CFont 类提供的创建

16、函数中常用的有以下几个:1.CreatePointFont( )BOOL CreatePointFont(int nPointSize,LPCTSTR lpszFaceName,CDC* pDC=NULL);参数说明:nPointSize:字体大小,以 1/10 磅为单位;lpszFaceName:创建字体对象所使用的字体名称;pDC:指向一个设备环境对象。2.CreateFontIndirect( )(略)3.CreateFont( )该函数包括 14 个参数,其原型为:BOOL CreateFont(int nHeight;int nWidth;int nEscapement;int nO

17、rientation;int nWeight;BYTE bItalic;BYTE bUnderline;BYTE cStrikeOut;BYTE nCharSet;BYTE nOutPreclsion;BYTE nClipPrecision;BYTE nQuality;BYTE nPitchAndFamily;LPCTSTR lpszFacename;)可以选择库存字体来重新设置字体。当选择库存字体作为文本输出的字体时,无须创建字体对象,只需简单地调用成员函数 CDC:SelectStockObject( ),将库存字体对象选入设备环境。【例 3.8】 编写一个单文档的应用程序 Li3_8,采

18、用不同的方法创建字体,并根据创建的字体输出不同的文本。3.4.3 格式化文本文本的显示是以像素为单位,在绘制任何文本之前,需要精确地知道文本的详细属性,如高度、宽度等,用来计算文本坐标。CDC 类提供了几个文本测量成员函数:1. GetTextExtent( )获得所选字体中指定字符串的宽度和高度。 CSize GetTextExtent(LPCTSTR lpszString,int nCount); 其中,1pszString 是字符串的指针,nCount 是所包括的字符数。返回值 CSize 是包含两个成员的结构,cx 是字符串的宽度,cy 是字符串的高度。1 什么是 GDIGDI 是 W

19、indows 系统的图形设备接口(Graphics Device Interface,GDI) ,通过 GDI编程,实现在窗口或其他图形设备上输出图形图像。2 什么是 CDC、 CClientDCCDC 是图形设备类,其中包括了图形设备的定义和绘制图形的功能函数。CClientDC 是 CDC 的派生类,其对象对应于窗口的客户区。编写绘图程序时,首先定义一个 CDC 类的对象,通过对象调用其成员函数进行绘图。3 什么是 WM_PAINT 消息和 OnDraw()函数WM_PAINT 是系统发给窗口的消息,当窗口进行刷新操作时,会收到来自系统的WM_PAINT 消息,通知窗口刷新事件。窗口关于

20、WM_PAINT 消息的映射函数,不同类型的窗口,具体名称不完全相同。视图 CView 为 OnDraw();框架窗口 CFrameWnd 为 OnPaint()4 如何定义 CDC 对象MFC 是通过绘制图形的函数在 CDC 类中,所以问题在于如何定义 CDC 的对象,以下方法可以单独使用,也可以混用方法一 在视图类的 OnDraw 函数中执行绘图pDC-图形函数其中 pDC 是图形设备对象指针方法二 在视图类的其他成员函数中执行绘图在需要绘图的地方写代码:CClientDC 对象名(this);对象名.图形函数方法三 定义全局的图形设备对象,可以在任何一个函数中使用1) 在视图类中增加成员

21、变量CClientDC* 对象指针名2) 在视图类的初始化函数 OnInitialUpdate 中初始化对象指针对象指针 = new CClientDC(this)3) 在需要执行绘图的地方(除 OnDraw 函数)对象名.图形函数5 常用的绘制图形、文字、图像的函数椭圆;线段;矩形;多边形6 画笔、画刷、字体对象如何使用以画笔为例,基本步骤为:(1)定义画笔对象CPen 笔对象;(2)设置笔参数笔对象.CreatePen(笔模式, 笔宽度, 笔颜色) ;(3)CDC 对象选用画笔DC 对象.SelectObject(笔对象);3.5 位图3.5.1 设备相关图(DDB)和设备无关图(DIB)

22、位图(bitmap),也称为点阵图,删格图象,像素图。位图是由像素组成的矩形区域,构成位图的最小单位是象素,每个象素有自己的颜色信息。位图就是由象素阵列的排列来实现其显示效果的。颜色深度,描述每个像素的颜色所用的位数,如 8 位、24 位等。24 位颜色可以由RGB(r,g,b )表示,r,g,b 分别为 0-255 范围的整数。Windows 支持两种不同形式的位图:设备相关位图(Device Dependent Bitmap ,DDB)设备无关位图(Device Independent Bitmap ,DIB)DDB 又称 GDI 位图,它依赖于具体设备,只能存在于内存中。DIB 是不依赖

23、硬件的位图,因为它包含了创建 DIB 位图时所在设备的颜色格式、分辨率和调色板等信息。DIB 位图不能直接显示,需要先转换为与设备相关的格式,再由具体的设备显示。DIB 位图通常以 BMP 后缀名的文件形式存储在磁盘中。3.5.2 位图操作函数MFC 提供了大量的类和函数来处理位图的操作。1 CBitmap 类保存一幅位图,并能够进行处理。主要成员函数:BOOL LoadBitmap(UINT nlDResource);从资源中加载位图,nlDResource 为资源 IDint GetBitmap(BITMAP* pBitMap);获取位图信息,保存到一个 BITMAP 结构中。2 CDC 类BOOL BitBlt(int x,int y,int nWidth,int nHeight,CDC* pSrcDC,int xSrc,int ySrc,DWORD dwRop);x、y、nWidth、 nHeight:定义当前设备环境的复制区域;pSrcDC:为指向原设备环境对象的指针;xSrc、ySrc:为原位图的左上角坐标;dwRop:定义了进行复制时的光栅操作方式。

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报