您好,欢迎访问三七文档
北京林业大学信息学院图形和文本输出图形设备接口和设备环境GDI对象CGdiObject画笔和画刷的使用处理文本位图上机指导北京林业大学信息学院抽象接口,负责管理用户绘图操作时功能的转换,用于实现图形操作与设备间的无关性,避免了用户对硬件直接进行操作。具体:用户通过调用GDI函数与设备打交道,GDI通过不同设备提供的驱动程序将绘图语句转换为对应的绘图指令。Windows支持与设备无关的图形利用GDI和Windows设备驱动程序开发人员只要建立与输出设备的关联,让系统加载相应的设备驱动程序即可图形设备接口GDI(GraphicsDeviceInterface)北京林业大学信息学院应用程序可以使用GDI创建3种类型的图形输出:矢量图形、光栅图形和文本。1.矢量图形:是指画线和填充图形,包括点、直线、曲线、多边形、扇形和矩形等。2.光栅图形:是指光栅图形函数对以位图形式存储的数据进行操作,包括各种位图和图标的输出。在屏幕上表现为对若干行和列的像素操作,在打印机上则是若干行和列的点阵输出。光栅图形是直接从内存到显存的复制操作,所以速度快,但是对内存大小要求高。3.文本:与字符方式下不同,Windows文本是图形方式输出。输出文本时对输出位置的计算不是以行为单位,以逻辑坐标为单位进行计算。用户可以设置文本的各种效果,如加粗、斜体、设置颜色等。北京林业大学信息学院设备环境DC(DeviceContext),也称设备描述表或设备上下文。它是由GDI创建、用来代表设备连接的数据结构。主要功能有如下:(1)允许应用程序使用一个输出设备。(2)提供Windows应用程序、设备驱动和输出设备之间的连接。(3)保存当前信息,例如当前的画笔、画刷、字体和位图等图形对象及其属性,以及颜色和背景等影响图形输出的绘图模式。(4)保存窗口剪切区域(ClippingRegion),限制程序输出到输出设备中窗口覆盖的区域。设备环境北京林业大学信息学院应用程序设备描述表及其属性应用程序每一次图形操作均参照设备描述表中的属性执行北京林业大学信息学院1.设备环境类CDC及其功能MFC封装了DC,提供CDC类及它的子类以访问GDI。MFC提供的设备环境类包括CDC、CPaintDC、CClientDC、CWindowDC和CMetaFileDC等,其中CDC类是MFC设备环境类的基类,其他MFC设备环境类都是CDC类的派生类,如图3.2所示。2.设备环境类CDC的一些常用函数CDC提供了基本的绘图操作函数,如画点、画线、画圆、画矩形、画多边形等。表3-2列出了一些常用函数及其功能。设备环境类CObjectCDCCClientDCCMetaFileDCCPaintDCCWindowDC北京林业大学信息学院Windows用COLORREF类型的数据存放颜色,它实际上是一个32位整数。COLORREF类型数据的低位字节存放红色强度值,第2个字节存放绿色强度值,第3个字节存放蓝色强度值,高位字节为0,每一种颜色取值范围为0~255。Windows使用宏RGB定义绘图的颜色,其形式为:RGB(nRed,nGreen,nBlue)红色值蓝色值绿色值RGB(255,0,0)RGB(0,255,0)RGB(0,0,255)颜色的设置北京林业大学信息学院绘图前,必须准备好设备环境DC。在程序中不能直接存取,只能通过系统提供的一系列函数或使用设备环境的句柄HDC来间接地获取或设置设备环境结构中的各项属性(显示器高度和宽度、支持的颜色数及分辨率等)。1.传统的SDK获取设备环境的方法(1)在WM_PAINT消息处理函数中使用API函数BeginPaint()获取设备环境,在消息处理函数返回前调用API函数EndPaint()释放设备环境。(2)不在WM_PAINT消息处理函数中,调用API函数GetDC()获取设备环境,调用API函数ReleaseDC()释放设备环境。WM_PAINT--图形刷新消息获取设备环境北京林业大学信息学院BeginPaint函数:hdc=BeginPaint(hwnd,&ps);系统获取设备环境的同时填写ps结构,以标识无效矩形区EndPaint函数voidEndPaint(HWNDhwnd,PAINTSTRUCT&ps)GetDC函数hdc=GetDC(hwnd);ReleaseDC函数voidReleaseDC(HWNDhwnd);BeginPaint与GetDC的区别项目函数BeginPaint函数GetDc函数使用环境只用于图形刷新时获取设备环境使用较为广泛操作区域使用BeginPaint函数获取设备环境后,操作区域为无效区域使用GetDC函数获取设备环境后,操作区域为整个用户区释放设备环境所用函数由EndPaint函数释放由ReleaseDC函数释放北京林业大学信息学院2.MFC应用程序获取设备环境的方法MFC提供了不同类型的设备环境类CDC(CDC、CPaintDC、CClientDC、CWindowDC等),每一个类都封装了设备环境句柄,并且它们的构造函数可自动调用上述获取设备环境的Win32API函数,析构函数可自动调用释放设备环境的Win32API函数。在一个MFC应用程序中获得DC的方法主要有两种:接受一个参数为指向CDC对象的指针;声明一个MFC设备环境类的对象,并使用this指针为该对象赋值。北京林业大学信息学院GDI对象是Windows图形设备接口的抽象绘图工具。除了画笔和画刷,其他GDI对象还包括字体、位图和调色板。MFC对GDI对象进行了很好的封装,提供了封装GDI对象的类,如CPen、CBrush、CFont、CBitmap和CPalette等,这些类都是GDI对象类CGdiObject的派生类。GDI对象CGdiObjectCObjectCGdiObjectCBitmapCBrushCFontCPaletteCPenCRgn北京林业大学信息学院1.CPen类:封装GDI画笔。用于绘制对象的边框以及直线和曲线。默认的画笔用于绘制与一个像素等宽的黑色实线。2.CBrush类:封装GDI画刷。画刷是用来填充一个封闭图形对象(如矩形、圆形)的内部区域的,默认画刷是白色。3.CFont类:封装GDI字体对象。主要用于设置文本输出的效果,包括文字的大小、加粗、斜体、下划线等。4.CBitmap类:封装GDI位图。提供成员函数装载和位图操作,位图可以用于填充区域。5.CPalette类:封装GDI调色板。包含系统可用的色彩信息,是应用程序和彩色输出设备环境(如显示器)的接口。6.CRgn类:封装GDI区域。区域是窗口内的一块多边形或椭圆形区域。CRgn配合CDC类中与裁剪(clipping)有关的成员函数使用。北京林业大学信息学院1使用库存(stock)对象无论以CDC类对象指针形式还是以CDC子类对象形式获得设备环境,系统都默认指定了一组绘图属性。绘图属性默认值改变默认值的函数画笔画刷背景颜色背景模式刷子原点当前绘图位置混合模式映射模式一个像素宽的黑色实线白色的实心刷白色OPAQUE设备坐标(0,0)逻辑坐标(0,0)R2_COPYPENMM_TEXTSelectObject,SelectStockObjectSelectObject,SelectStockObjectSetBKColorSetBKModeSetBrushOrgMoveToSetRop2SetMapMode画笔和画刷的使用北京林业大学信息学院使用SelectStockObject()函数可以直接选择库存对象。如果选择成功,函数SelectStockObject()将返回以前的CGdiObject对象的指针,可直接选用的库存对象见表。GDI分类库存对象值说明PensBrushsBLACK_PENWHITE_PENNULL_PENBLACK_BRUSHWHITE_BRUSHGRAY_BRUSHLTGRAY_BRUSHDKGRAY_BRUSHHOLLOW_BRUSHNULL_BRUSH黑色画笔白色画笔空画笔黑色画刷白色画刷灰色画刷浅灰色画刷深灰色画刷虚画刷空画刷北京林业大学信息学院a.创建画笔:(1)CPenPenNew(PS_DASH,1,RGB(255,0,0));(2)CPenPen;pen.CreatePen(PS_DASH,1,RGB(255,0,0));其中,参数依次是笔的样式、线的宽度、线的颜色。画笔的操作创建画笔将画笔选入设备环境删除画笔2创建和使用自定义画笔hP=CreatePen(intnPenStyle,intnWidth,COLORREFrgbColor);HPENhP;DeleteObject(hP);SelectObject(hdc,hP);北京林业大学信息学院b.选择创建的画笔例如:CPen*PenOld;//用于保存原来的画笔PenOld=pDC-SelectObject(&PenNew);c.还原画笔例如://恢复设备环境DC中原来的画笔pDC-SelectObject(PenOld);//删除创建的画笔PenNew.DeleteObject();北京林业大学信息学院创建画刷、选择创建的画刷和还原画刷等步骤。类型不同的画刷使用不同的CBrush成员函数实现。(1)创建指定颜色的实心画刷函数为:BoolCreateSolidBrush(COLORREFcrColor);例如:CBrushbrush;brush.CreateSolidBrush(RGB(255,0,0));//红HBRUSHCreatePatternBrush(HBITMAPhbmp);HBRUSHCreateSolidBrush(COLORREFcrColor);HBRUSHCreateHatchBrush(intfnStyle,COLORREFclrref);3创建和使用自定义画刷北京林业大学信息学院(2)创建阴影画刷函数:BoolCreateHatchBrush(intnIndex,COLORREFcrColor);参数nIndex用于指定阴影样式例如CBrushbrush;//水平和垂直交叉阴影线的红色画刷brush.CreateHatchBrush(HS_CROSS,RGB(255,0,0));(3)创建位图画刷函数BoolCreatePatternBrush(CBitmap*pBitmap);//8*8例如:CBitMapmybmp;mybmp.LoadBitMap(IDB_MYBMP);CBrushbrush;brush.CreatePatternBrush(&mybmp);北京林业大学信息学院CDC中常用绘图函数Arc()根据指定的矩形绘制内切椭圆上的一段弧边Chord()绘制弦形,弦形是一条椭圆弧和其对应的弦所组成的封闭图形EIlipse()根据指定的矩形绘制一个内切圆或椭圆LineTo()从当前位置到指定位置画一条直线MoveTo()移动当前位置到指定的坐标Polyline()绘制连接指定点的折线段PolyBezler()根据两个端点和两个控制点绘制贝塞尔曲线Pie()绘制一个饼块Polygon()根据两个或两个以上顶点绘制一个多边形Rectangle()根据指定的左上角和右下角坐标绘制一个矩形RoundRect()绘制一个圆角矩形SetPixel()用指定颜色在指定坐标画一个点北京林业大学信息学院CDC绘图与Win32绘图的区别设置画笔当前位置的函数MoveToEx,BOOLMoveToEx(HDChdc,intX,Y,//X、Y分别为新位置的逻辑坐标LPPOINTlpPoint//存放原画笔位置的POINT结构地址)从当前位置向指定坐标点画直线的函数LineTo,BOOLLineTo(HDChdc,intX,intY)//X和Y为线段的终点坐标从当前位置开始,依次用线段连接lpPoints中指定的各点BOOLPolyline(HDChdc,LPPOINTlpPoints,//指向包含各点坐标的POINT结构数组intnCount//nCount
本文标题:第四章 图形和文本
链接地址:https://www.777doc.com/doc-3827910 .html