欢迎来到天天文库
浏览记录
ID:61539253
大小:103.52 KB
页数:22页
时间:2021-02-25
《Lesson07-08图形设备接口.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Lesson07-08图形设备接口Windows系统具有丰富的图形界面。Windows系统提供许多函数来实现绘图的要求。而图形设备接口(GraphicsDeviceInterface,简写为GDI)就可看作是这些函数的集合。GDI表示的是一个抽象的接口。通过该接口能够实现对图形的颜色、线条的粗细等属性的操纵(甚至包括输出文字在内)。应用程序能够通过调用这些GDI函数和硬件打交道,而不必明白到底是哪个厂家生产的硬件,从而实现了设备无关性。Windows系统本身也使用GDI来绘制用户界面的各个部分。一、设备环境1.设备环境Windows默认使用
2、客户区坐标系,其原点在窗口客户区的左上角,X轴的正方向指向右边,Y轴的正方向指向下边。当应用程序并没有设置颜色、字体等时,系统使用默认的设置。这些默认的设置储存在设备环境中。如果没有设备环境,则每输出一个字符串(调用一次TextOut函数),就需要把字体和颜色也作为参数传递给TextOut函数,而且如此的参数有专门多。为了幸免如此的苦恼,Windows就把这些可能会重复的参数放在了设备环境中,如此每次只需要多传入一个设备环境的指针就能够了,大大减少了重复工作。设备环境(DeviceContext,缩写为DC,有时译为设备上下文,也称设备描述
3、表)是一种包含各种绘图属性(如字体、颜色等等)和方法(即各种绘图函数)的数据结构(或者集合)。它不仅能够绘制各种图形,而且还能够确定在应用窗口中绘制图形的方式,即确定绘图混和模式和映射模式。用户在绘图之前,必须猎取绘图窗口区域的一个设备环境DC,才能进行GDI函数的调用,执行适合于设备环境DC的命令(就像OnDraw函数中的pDC指针)。DC中除了提供绘图的函数(如:TextOut)以外,还会提供给用户改变绘图属性的函数,如颜色。Windows的设备环境是GDI的关键元素,它代表了不同的物理设备。分为4种类型:显示型、打印机型、内存型和信息
4、型。每种类型的设备环境都有各自的特定用途,见下表:设备环境的类型和用途设备环境显示器型打印机型用途支持视频显示器上的绘图操作支持打印机和绘图仪上的绘图操作内存型信息型支持位图上的绘图操作支持设备数据的访咨询2.MFC中的设备环境类在MFC类库中,设备环境被CDC类封装了起来,而CDC类下面又有4个派生类,各有特点,并能够完成不同的功能,如下所示:CMetaFileDC专门用于Windows图元文件,剩下的三种DC类之间存在差不:CDC类的派生类派生类名称讲明CClientDC讲明一个客户区设备环境,提供对窗口客户区域的图形访咨询。在窗
5、口中画图时可使用这种DC,但对WM_PAINT消息除外CWindowDC能够提供在整个窗口(包括客户区和非客户区)中画图的设备环境CPaintDC这是创建响应WM_PAINT消息的设备环境,应用程序能够使用此类更新Windows显示,通常在MFC应用程序的OnPaint()函数中使用CMetaFileDC那个设备环境代表Windows元文件,包含一系列命令以重新产生图像。要创建独立于设备的文件时可使用这种DC,用户能够回放这种文件来创建图像①CWindowDC类与CPaintDC和CClientDC类的区不■绘图区域不同:CWindowDC
6、类与CPaintDC和CClientDC类的区不的一个方面确实是绘图区域不同。用CPaintDC类和CClientDC类的对象绘制图形时,绘制区只能是客户区,而不能在非客户区,而CWindowDC能够在非客户区进行图形绘制。■绘图坐标系不同:在CWindowDC绘图类下,坐标系是建立在整个屏幕上的,在像素坐标方式下,坐标原点在屏幕的左上角,而在CPaintDC和CClientDC绘图类下,坐标系是建立在客户区上的,在像素坐标方式下,坐标原点在客户区的左上角。②CPaintDC类与CClientDC类的区不■绘图机制不同:CPaintDC类与
7、CClientDC类差不多上在窗口的客户区内绘制图形,但两者在绘制机制上有着本质的区不。CPaintDC类应用在OnPaint函数中,以响应Windows的WM_PAINT消息,而CClientDC应用在非响应WM_PAINT消息的情形下。CPaintDC类响应WM_PAINT消息,自动完成绘制,这对爱护图形的完整性有着重要的作用。例如在一个窗口中,差不多绘制了n条直线,那个窗口的完整性可能会被破坏(如被对话框覆盖),当破坏完整性的程序终止时,即覆盖取消,那个窗口就会接收到一个WM_PAINT消息,得到此消息后,激活消息处理函数(如OnPa
8、int)进行窗口绘制。CPaintDC类对象就担负着现在的绘制工作。如果现在想在屏幕上再绘制一条直线(如用鼠标实时绘制,当第二次单击鼠标左键时完成绘制),就要用到CClinetD
此文档下载收益归作者所有