第33 章使用GDI+绘图 在本书中,有8 章内容介绍用户交互和.NET Framew ork,第31 章主要介绍了如何显示对话框或SDI、MDI 窗口,以及如何把各种控件放在这些窗口上,如按钮、文本框和列表框。第32 章介绍在Window s 窗体中使用许多 Window s 窗体控件处理各种数据源中的数据。 这些标准控件的功能非常强大,使用它们就可以获得许多应用程序的完整用户界面。但是,有时还需要在用户界面上有更大的灵活性。例如,要在窗口的确定位置以给定的字体绘制文本,或者显示图像,但不使用图像框控件,只使用形状和图形。这些都不能使用第31 章介绍的控件来完成。要显示这种类型的输出,应用程序必须直接告诉操作系统需要在其窗口的什么地方显示什么内容。 本章主要介绍如何绘制以下内容: ● 绘图规则 ● 直线、简单图形 ● .BMP 图像和其他图像文件 ● 文本 ● 处理打印 在这个过程中,还需要使用各种帮助对象,包括钢笔(用于定义直线的特性)、画笔(用于定义区域的填充方式)和字体(用于定义文本字符的图形)。我们还将介绍设备如何解释和显示不同的颜色。 下面首先讨论 GDI+技术。GDI+由.NET 基类集组成,这些基类可用于在屏幕上完成定制绘图,能把合适的指令发送到图形设备的驱动程序上,确保在监视器屏幕上显示正确的输出(或打印到硬拷贝中)。 33.1 理解绘图规则 本节讨论一些基本规则,只有理解了它们,才能开始在屏幕上绘图。首先概述 GDI,GDI+技术就建立在GDI 上,然后说明它与 GDI+的关系。接着介绍几个简单的例子。 33.1.1 GDI和GDI+ 一般来说,Window s 的一个优点 (实际上是现代操作系统的优点) 是它可以让开发人员不考虑特定设备的细节。例如,不需要理解硬盘设备驱动程序,只需在相关的.NET 类中调用合适的方法(在.NET推出之前,使用等价的 Window s API 函数),就可以编程读写磁盘上的文件。这个规则也适用于绘图。计算机在屏幕上绘图时,把指令发送给视频卡。问题是市面上有几百种不同的视频卡,大多数有不同的指令集和功能。如果把这个考虑在内,在应用程序中为每个视频卡驱动程序编写在屏幕上绘图的特定代码,这样的应用程序就根本不可能编写出来。这就是为什么在Window s 最早期的版本中就有Window s Graphical Device Interface (GDI)的原因。 GDI+提供了一个抽象层,隐藏了不同视频卡之间的区别,这样就可以调用 Windows API 函数完成指定的任务了,GDI 会在内部指出在运行...