17.2 一个基本显示模型
iostream库是面向字符的输入输出流,用于处理数值序列或者书籍文本最为适合。其中,直接支持图形位置概念的仅有newline和tab控制字符。版面设计(排版、“标注”)语言,如Troff、TeX、Word、HTTP、XML(及其配套的图形包),允许在一维字符流中嵌入颜色和二维位置等概念。例如:
这段HTML代码指定了一个文档头(<h2>…</h2>)、一个包含若干列表项(<il>…</il>)的列表(<ul>…</ul>)和一个段落(<p>)。这里,我们省略了很多无关的代码。这类语言的关键点是,你可以在普通文本中表示版面的概念,但代码与屏幕上的显示内容之间不是直接关联的,而是由解释这些“标注”命令的程序来控制屏幕上的显示内容。这种技术极为简单,又极为有效(现在你所阅读的所有文档等基本都是这样生成的),但也有其缺点。
本章和之后四章介绍另外一种技术:一种直接在屏幕显示的图形及图形用户界面的概念。其基本概念先天就是图形化的(而且都是二维的,适应计算机屏幕的矩形区域),这些基本概念包括坐标、线、矩形和圆等。从编程的角度看,其目的是建立内存中的对象和屏幕图像的直接对应关系。
其基本模型如下:我们利用图形系统提供的基本对象(如线)组合出更复杂的对象;然后将这些对象“添加”到一个表示物理屏幕的窗口对象中;最后,用一个程序将我们添加到窗口上的对象显示在屏幕上。我们可以将这个程序看作屏幕显示本身,或者是一个“显示引擎”,或者是“我们的图形库”,或是“GUI库”,甚至(幽默地)将其看作“在屏幕背后进行画图工作的小矮人”。
“显示引擎”负责在屏幕上绘制线,将文本串放置在屏幕上,为屏幕区域着色,等等。简单起见,我们将使用“我们的GUI库”甚至“系统”来表示显示引擎,虽然GUI库的功能不只是绘制对象。与我们的代码调用GUI库实现大部分图形功能一样,GUI库将它的很多工作交由操作系统来完成。