2024年4月29日发(作者:)
1
第7 章屏幕绘图及文本显示
屏幕是最基本的输出设备,屏幕绘图及文本显示是应用程序最常用的功能,本章讲述
VisualC ++中屏幕绘图及文本显示的工作原理及其基本编程方法。首先介绍GDI与设备描述
表,然后介绍CDC类、映射方式等概念,最后介绍基本的绘图函数及文本显示函数的用法。
7.1 GDI与设备描述表
Windows 操作系统是一个图形界面的操作系统,为了方便地在屏幕上和打印机上绘制
或输出图形与文本,Windows 系统中为用户提供了设备描述表和GDI 函数来实现应用程序
与物理设备间的接口。
7.1.1 GDI的基本概念
Windows图形设备接口GDI(Graphical Device Interface)是为与设备无关的图形设计的。
所谓设备的无关性,就是操作系统屏蔽了硬件设备的差异,因而设备无关性能使用户编程
时无需考虑特殊的硬件设置。
Windows把与绘图工作相关的操作都制作成了函数,GDI提供了用户可以调用的一套
用于绘图的函数集。无论基础硬件如何,同一函数都能够生成相同结果。例如,调用GDI
函数中的Ellipse函数可以绘制椭圆,调用TextOut函数可以绘制文本,调用Rectangle函数
可以绘制矩形等。
除了这些绘图函数之外,GDI还有一套用于绘图的工具(对象),比如画刷、画笔等。
GDI绘图工具的使用在7.4小节中介绍。
文本被看作是图形,这种处理方式虽然在创建文本输出时增加了复杂度,但也增强了
灵活性。可以让原本在文本世界非常困难的工作变得非常轻松。
7.1.2设备描述环境
Windows下,有多种输出设备,如各种显示器、打印机、绘图仪等。由于用来显示图
形的实际物理设备的多样性,因此要求程序设计人员具有对所有图形显示设备的编程能力
是不现实的。为了简化应用这些性质不同的设备的访问,实现与设备无关的绘图操作,
Windows 提供了一种叫做设备描述表的机制,也称为设备环境DC(Device Context),它是
Windows 应用程序与设备驱动程序和输出设备(如打印机、显示器等)之间的接口,用来
作为应用程序与控制输出设备的低层之间的通道。设备描述表是一种可以在其上绘图的“逻
辑画布”,它接收应用程序的绘图命令,再将其翻译为控制设备驱动程序的低层指令。程序
员可以在这个虚拟的图形显示对象上进行绘图,而把这个图形最终转换为实际物理设备上
图形的工作则交给系统去完成。这样,通过设备描述符表机制,程序可以独立于“真实”
的硬件。
设备环境DC(Device Context)是由GDI保存的一个数据结构,设备环境包含了输出
设备的绘图特征,不同设备有不同的设备环境,在输出设备上输出的先决条件是获得该设
备的设备环境。例如,为了在屏幕上显示绘图,Window程序必须有该显示器的一个DC。
为了在打印机输出,还需要另一个专门为打印机创建的DC。
Windows 中的设备描述表分为以下4 种类型。
显示器型:支持显示器上的绘图操作。
打印机型:支持打印机和绘图仪上的绘图操作。
2
内存型:支持位图上的绘制操作。
信息型:支持设备数据的访问。
为了方便,Windows系统初始化了一套DC的属性和对象,表7-1为显示器DC的属性
及默认值,获得了该设备的DC后,程序设计人员就可以在这个默认的环境下开始绘图工作
了。当然,如果程序员对预置的属性和对象不满意的话,也可以按自己的要求对它们进行
设置。例如,默认的DC中预置了一支黑色画笔,所以这时用GDI的绘图函数绘制的任何
线条都是黑色的。如果想使用其他颜色绘制线条的话,程序员可以用其他颜色的画笔来替
换这支黑色的画笔。DC在任何时候总是必须存在着一套完整的绘图工具。这意味着,不能
从DC中删除一个工具,只能用一个工具替换另一个工具。绘图过程可描述为使用GDI 对
象(逻辑画笔或画刷等)在设备描述表(逻辑画布)上绘制的过程。
表7-1显示器DC的属性及默认值
属性
背景色
背景模式
位图
画刷
画刷起始位置
剪截域
颜色调色板
绘图方式
字体
字符间距
映射方式
画笔
多边形填充方式
缩放模式
文本颜色
试图范围
视图原点
窗口范围
窗口原点
默认值
WHITE
OPAQUE
NONE
WHITE_BRUSH
(0,0)
DISPLAY SURFACE
DEFAULT_PALETTE
R2_COPYPEN
SYSTEM_FONT
0
MM_TEXT
BLACE_PEN
ALTERNATE
BLACKONWHITE
BLACK
(1,1)
(0,0)
(1,1)
(0,0)
7 . 2CDC 类
MFC的CDC类对设备描述表和GDI 函数进行了全面的封装,使这两者的使用更加方
便。CDC 类是一个通用的类,可以从它派生出特定类型的DC子类。
1、CDC 类的成员函数
由于DC 与屏幕绘图及文本显示操作密切相关,CDC 类的成员函数主要包括以下几
类:
初始化函数,比如为指定的设备创建设备描述符表等。
设备描述符表函数,比如保存或恢复DC的状态等。
发布评论