关于设备场景,叫法颇多,有些书上说为设备环境、显示场景,更常见的叫做设备描述表或设备描述体。当然你爱怎么叫随你的便,我还是喜欢说为设备场景。那 么究竟什么是设备场景呢? 设备场景是一种windows对象,而windows则是一种图形环境,其图形系统令人难以自信地灵活和强大。而实质上,widnows下的所有绘图都是 通过设备场景进行的,而不是直接对窗口和设备本身进行。为了说明设备场景,很多书都拿一些现实生活中的现象来进行对照说明。其中,最常见的是把它比喻为一 位画家在作画。我想大家都看过画家是如何画画的,最起码是在电影里或者是在道旁的广告牌上作画的画家。我们可以想象一下∶有个风景秀丽的白云山(是我瞎起 的名)上,有位画家一只手拿着调色板,另一只手则拿着画笔,面对一个画板正在写风景画。有些书认为画家的调色板相当于设备场景,有些书则认为画板相当于设 备场景,说法不一。鉴于这种情况,我认为还是直接去说明设备场景比较好。
作为windows的对象,设备场景实际上是一种windows内部的数据结构。就象pointapi数据结构具有x和y两个属性一样,设备场景同样具有着它自身的属性,只是属性比较多而已,如下表∶
设备场景属性
属 性 默 认 值
背景色(background color) 白色(white)
背景模式(background mode) 不透明(opaque)
位图(bitmap)无(none)
刷子(brush)白色刷子(white brush)
刷子起点(brush origin) 0,0
剪切区(clipping region) 整个窗口或设备表面(entire window or device surface)
调色板(color palette) 默认调色板(default palette)
画笔位置(pen position) 0,0
绘图模式(drawing mode) r2_copypen
字体(font) 系统字体
字间距(intercharater spacing) 0
影射模式(mapping mode) mm_text
画笔(pen) 黑色(black)
多边形填充模式(mapping mode) alternate
伸缩模式(stretching mode) blackonwhite
文本色(text color) 黑色(black)
视口起点(viewport origin) 0,0
视口范围(viewport extents) 1,1
窗口起点(window origin) 0,0
窗口范围(window extents) 1,1
请你多看看这张表,对设备场景都有哪些属性,脑子里应当有个印象。事实上,设备场景的很多属性对应于vb中 的form、picturebox、text等窗体或控件的属性。比如,字体、背景色、绘图模式等等。可想而知,很多学vb的朋友尽管并不知道什么叫设备 场景,但实质上都不知不觉地使用了设备场景。可以说,设备场景是windows编程中最重要的概念之一。
对于设备场景,有些朋友可能一时不大好理解,这很自然,不用担心谁都是一样。不知对你能否作为一个帮助,我是把设备场景想象成一种配套的(包括画板、调色 板、画笔、刷子等)的绘画工具。其中画板是最重要的,其他的东西都是为这个画板服务的。如过你创建了一个设备场景,就等于是你从百货商店买来了这一套绘画 工具,从而具备了绘画的条件。但,你的房间总不是那么宽敞的。为了继续绘出别的画、继续购买新的绘画工具,无用的工具应当及时清理掉。因为设备场景本身是 占用内存的。不要担心这会降低运行速度,对计算机来说创建一个设备场景,再删掉一个设备场景,那都是瞬息之间的事情,根本谈不上什么浪费时间,绝对不像跑 一趟百货商店那么麻烦、费时。对于绘图,你应当认识的一点是,绘图并不是简单地指绘画,输出文本也是一种绘图过程。尽管如此,api函数中图形函数与文本 函数大体都是各自各的。绘画和写文本都是在同样的设备场景中进行,这一点很重要。
我想,你大概还是没有理解好,不过没有关系,继续往下看好了。本节中请记住一点∶
widnows下的所有绘图都是通过设备场景进行的。