3、图形与文.doc_第1页
3、图形与文.doc_第2页
3、图形与文.doc_第3页
3、图形与文.doc_第4页
3、图形与文.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 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负责管理用户绘图操作时功能的转换,实现设备无关性。 应用程序可以使用GDI创建3种类型的图形输出:矢量图形、光栅图形和文本。1.矢量图形矢量图形输出是指画线和填充图形,包括点、直线、曲线、多边形、扇形和矩形等。通常所说的图形都是指矢量图形。2.光栅图形光栅图形输出是指光栅图形函数对以位图形式存储的数据进行操作,它包括各种位图和图标的输出。光栅图形一般称为图像。3.文本与DOS字符方式下输出文本不同,Windows中的文本是按图形方式输出的。3.1.2 设备环境Windows应用程序的输出不直接面向显示器或打印机等物理设备,而是面向一个称之为设备环境(Device Context,DC)的虚拟逻辑设备。设备环境DC,也称设备描述表或设备上下文。它是由GDI创建、用来代表设备连接的数据结构。DC的主要功能有以下几种:(1) 允许应用程序使用一个输出设备。(2) 提供Windows应用程序、设备驱动和输出设备之间的连接。(3) 保存当前信息,例如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜色和背景等影响图形输出的绘图模式。(4) 保存窗口剪切区域,限制程序输出到输出设备中窗口覆盖的区域。3.1.3 设备环境类 GDI和DC是Windows的接口,在MFC中,具体功能封装在CDC类,称为设备环境类。1. 设备环境类CDC及其功能CDC 是所有设备环境类的基类,对GDI的所有绘图函数进行了封装CClientDC 是CDC类的派生类,代表窗口客户区的设备环境代表整个窗口的设备环境,包括客户区和非客户区2. 设备环境类CDC的一些常用函数Arc() Chord() Ellipse() LineTo() MoveTo()Ployline() Pie() Rectangle()3.1.4 颜色的设置Windows用COLORREF类型的数据存放颜色,它是一个32位整数。任何一种颜色都是由红、绿、蓝3种基本颜色组成的,COLORREF类型数据的低位字节存放红色强度值,第2个字节存放绿色强度值,第3个字节存放蓝色强度值,高位字节为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 CMyView: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】编写一个单文档的MFC应用程序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,装载和操作位图调色板类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 使用笔对象画笔类是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(&pen);pDC-Ellipse(10,10,100,100);/pDC选用了一个红色的、宽度4的、实线笔画园。【例3.5】 编写一个单文档应用程序Li3_5,使用库存画笔和画刷在视图中绘制图形。【例3.6】 编写一个单文档应用程序Li3_6,绘制不同样式、线宽及颜色的矩形。3.3.2 创建和使用画刷画刷是在画封闭曲线时用来填充的颜色,例如画圆形或方形时系统会用当前的刷子对内部进行填充。方法1 使用库存的画刷pDC-SelectStockObject (nMode);nMode BLACK_BRUSH WHITE_ BRUSH GRAY_ BRUSH NULL_ BRUSH方法2 使用画刷对象(1)定义画刷对象 CBrush 画刷对象;(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-SelectObject(&bsh);pDC-Ellipse(10,10,100,100);/pDC选用了一个红色的、十字网格的刷子画园。【例3.7】编写一个单文档应用程序Li3_7,绘制不同颜色、不同阴影形式的填充矩形。补充:窗口定时器窗口CWnd 允许安装定时器,安装后,系统将按设定的时间向窗口发WM_TIMER消息,窗口对应的映射函数为OnTimer。利用定时器的特点,可以编写如动画效果的程序。SetTimer(n,1000,NULL);/安装定时器,并将其时间间隔设为1000毫秒KillTimer(n);/销毁定时器其中的n为第几个定时器,一般为1。响应定时器的函数为OnTimer,可以在类向导中选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类中常用的文本输出函数有以下几种:TextOut( )该函数使用当前设定的字体、颜色、对齐方式在指定位置上输出文本。vitual BOOL TextOut(int x,int y,LPCTSTR lpszString,int nCount);或: BOOL TextOut(int x, int y,const Cstring &str);其中,参数(x,y)指定输出文本串的开始位置;参数lpszString和str为输出的文本串;参数nCount指定文本串的长度。3.4.1 设置文本显示属性 在默认情况下输出文本时,字体颜色是黑色,背景颜色是白色,背景模式为不透明模式。通过调用CDC类成员函数重新设置字体颜色、背景颜色和文本对齐方式等文本显示属性,下表是文本属性显示的常用函数。文本属性函数 1.设置背景模式 int SetBkMode(int nBkMode); 其中,nBkMode指定背景模式,其值是OPAQUE(不透明)或TRANSPARENT(透明)。2.设置文本对齐方式 SetTextAlign( )函数改变文本对齐方式: UINT SetTextAlign(UINT nFlags); 其中,nFlag为下表中列出的标志的组合。文本对齐标志 3.4.2 设置字体字体也是一种GDI对象,字体对象的创建、选择、使用和删除的步骤与其他GDI对象类似。CFont类提供的创建函数中常用的有以下几个: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 nOrientation;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,采用不同的方法创建字体,并根据创建的字体输出不同的文本。3.4.3 格式化文本 文本的显示是以像素为单位,在绘制任何文本之前,需要精确地知道文本的详细属性,如高度、宽度等,用来计算文本坐标。 CDC类提供了几个文本测量成员函数:1. GetTextExtent( ) 获得所选字体中指定字符串的宽度和高度。 CSize GetTextExtent(LPCTSTR lpszString,int nCount); 其中,1pszString是字符串的指针,nCount是所包括的字符数。 返回值CSize是包含两个成员的结构,cx是字符串的宽度,cy是字符串的高度。1 什么是GDIGDI是Windows系统的图形设备接口(Graphics Device Interface,GDI),通过GDI编程,实现在窗口或其他图形设备上输出图形图像。2 什么是CDC、CClientDCCDC是图形设备类,其中包括了图形设备的定义和绘制图形的功能函数。CClientDC是CDC的派生类,其对象对应于窗口的客户区。编写绘图程序时,首先定义一个CDC类的对象,通过对象调用其成员函数进行绘图。3 什么是WM_PAINT消息和OnDraw()函数WM_PAINT是系统发给窗口的消息,当窗口进行刷新操作时,会收到来自系统的WM_PAINT消息,通知窗口刷新事件。窗口关于WM_PAINT消息的映射函数,不同类型的窗口,具体名称不完全相同。视图CView为OnDraw();框架窗口CFrameWnd为OnPaint()4 如何定义CDC对象MFC是通过绘制图形的函数在CDC类中,所以问题在于如何定义CDC的对象,以下方法可以单独使用,也可以混用方法一 在视图类的OnDraw函数中执行绘图pDC-图形函数其中pDC是图形设备对象指针方法二 在视图类的其他成员函数中执行绘图在需要绘图的地方写代码:CClientDC 对象名(this);对象名.图形函数方法三 定义全局的图形设备对象,可以在任何一个函数中使用1) 在视图类中增加成员变量 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)位图(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是不依赖硬件的位图,因为它包含了创建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:定义了进行复制时的光栅操作方式。3.5.3 位图的显示采用MFC方法编程时,显示一个DDB位图需要执行以下几个步骤。(1)声明一个CBitmap类的对象,使用LoadBitmap( )函数将位图装入内存。(2)声明一个CDC类的对象,使用CreateCompatibleDC( )函数创建一个与显示设备环境兼容的内存设备环境。 CreateCompatibleDC( )函数的原型为: Virtual Bo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论