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的状态等。