第9章图形绘制
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
9.1.2 设备环境
为了实现设备无关性,应用程序的输出不直接面向显示 器等物理设备,而是面向一个称之为设备环境 DC(Device Context)的虚拟逻辑设备。
设备环境也称设备描述表或设备上下文,它是由 Windows管理的一个数据结构,它保存了绘图操作中一 些共同需要设置的信息,如当前的画笔、画刷、字体和 位图等图形对象及其属性,以及颜色和背景等影响图形 输出的绘图模式。
CPaintDC类是OnPaint()函数使用的设备环境类,它代表 一个窗口的绘图画面。如果添加WM_PAINT消息处理函 数OnPaint(),就需要使用CPaintDC类来定义一个设备环 境对象。
CClientDC类代表了客户区设备环境。当在客户区实时绘 图时,需要利用CClientDC类定义一个客户区设备环境。
如果采用MFC方法编程,MFC提供了不同类型的DC类, 每一个类都封装了DC句柄,并且它们的构造函数自动 调用获取DC的API函数,析构函数自动调用释放DC的 API函数。因此,在程序中通过声明一个MFC设备环境 类的对象就自动获取了一个DC,而当该对象被销毁时 就自动释放了获取的DC。MFC AppWizard应用程序向 导创建的OnDraw()函数自动支持所获取的DC。
编程时采用MFC方法绘制图形也很方便,MFC对GDI 函数和绘图对象进行了封装。
9.1.1 概述
图形设备接口GDI管理Windows应用程序图形的绘制, 在应用程序中,通过调用GDI函数绘制不同尺寸、颜 色、风格的几何图形、文本和位图。这些图形处理 函数组成了图形设备接口GDI。
GDI是形成Windows核心的动态链接库之一,MFC 将GDI函数封装在一个名为CDC的设备环境类中,可 以通过调用CDC类的成员函数来完成绘图操作。
形象地说,一个设备环境提供了一张画布和一些绘画的 工具,我们可以使用不同颜色的工具在上面绘制点、线、 圆和文本。
设备环境中的“设备”是指任何类型的显示器或打印机 等输出设备,绘图时用户不用关心所使用设备的编程原 理和方法。所有的绘制操作必须通过设备环境进行间接 的处理,Windows自动将设备环境所描述的结构映射到 相应的物理设备上。
从根本上来说,设备环境DC是一个Windows数据结构, 该结构存储着程序向设备输出时所需要的信息,应用程 序利用它定义图形对象及其属性,并实现应用程序、设 备驱动程序和输出设备之间绘图命令的转换。
在Windows中不使用DC无法进行输出,在使用任何GDI 绘图函数之前,必须建立一个设备环境。
获取设备环境DC的方法:
前面几章已经涉及到有关图形处理的内容, 只是使用了Windows系统默认的图形设备接口和 设备环境,绘制的图形没有颜色、线型和字体的 变化。
9.1 图形设备接口
Windows提供了一个称为图形设备接口GDI(Graphics Device Interface)的抽象接口。GDI作为Windows的重 要组成部分,它负责管理用户绘图操作时功能的转换。 用户通过调用GDI函数与设备打交道,GDI通过不同设 备提供的驱动程序将绘图语句转换为对应的绘图指令, 避免了直接对硬件进行操作,从而实现所谓的设备无 关性。
第9章
Visual C++面向对象编程
Visual C++ Object Oriented Programming
第9章 图形绘制
第9章 图形绘制
内容ຫໍສະໝຸດ Baidu要
图形处理的基本原理 – 图形设备接口 – 设备环境 – GDI坐标系 – 映射模式
使用画笔和画刷绘制图形 文本与字体 位图、图标和光标
Windows是一个图形操作系统,其所有的图 形可视效果都是通过绘制操作而完成的。图形显 示的实质就是利用Windows提供的图形设备接口 将图形绘制在显示器上。大多数应用程序都需要 在客户区绘制一些图形,如绘制文本、几何图形、 位图和光标等。
CWindowDC类代表了整个程序窗口设备环境,可以在整 个窗口区域绘图。
9.1.3 GDI坐标系和映射模式
Windows坐标系分为逻辑坐标系和设备坐标系两种 , GDI支持这两种坐标系。一般而言,GDI的文本和图形 输出函数使用逻辑坐标,而在客户区移动或按下鼠标的 鼠标位置是采用设备坐标。
逻辑坐标系是面向DC的坐标系,这种坐标不考虑具体 的设备类型,在绘图时,Windows会根据当前设置的映 射模式将逻辑坐标转换为设备坐标。
所谓设备无关性,是指操作系统屏蔽了硬件设备的 差异,使用户编程时一般无需考虑设备的类型,如 不同种类的显示器或打印机。
Windows绘图过程和设备无关性的实现:
GDI处于设备驱动程序的上一层,当程序调用绘图函数时, GDI将绘图命令传送给当前设备的驱动程序,以调用驱动程序 提供的接口函数。驱动程序的接口函数将Windows绘图命令转 化为设备能够执行的输出命令,实现图形的绘制。不同设备 具有不同的驱动程序,设备驱动程序是设备相关的。
在程序中不能直接存取DC数据结构,只能通过系统提 供的一系列函数或使用设备环境的句柄HDC来间接地获 取或设置设备环境结构中的各项属性,如显示器高度和 宽度、支持的颜色数及分辨率等。
如果采用SDK方法编 程,获取DC的方法有两种:在 WM_PAINT 消 息 处 理 函 数 中 通 过 调 用 API 函 数 BeginPaint()获取设备环境,在消息处理函数返回前调用 API函数EndPaint()释放设备环境。在其他函数中通过调 用 API 函 数 GetDC() 获 取 设 备 环 境 , 调 用 API 函 数 ReleaseDC()释放设备环境。
MFC 的 DC 类 包 括 CDC、CPaintDC、CClientDC、 CWindowDC 和 CMetaFileDC 等 , 其 中 CDC 类 是 MFC 设 备环境类的基类,其它的MFC设备环境类都是CDC的 派生类。
MFC设备环境类:
CDC类既作为其它MFC设备环境类的基类,又可以作为 一个一般的设备环境类使用。可以访问设备属性和设置 绘图属性,对GDI的所有绘图函数进行了封装。