分类: C/C++
2009-08-04 14:52:33
Symbian OS中,在可显示窗体上画图,无论是RWindow还是RBackedUpWindow,都是通过图形设备(graphics device)和图形上下文(graphics context)来实现。图形上下文是整个画图的核心概念,在介绍它之前我们先介绍一下图形设备的概念。
图形设备(graphics device)
图形设备是对呈现图形的设备的抽象,比如屏幕、打印机等。图形设备提供了一组独立于设备的接口,应用程序使用这些接口,通过图形上下文(graphics context)来画图。图形设备其实是画图的中介,图形上下文在画图时画在这些图形设备上。
在Symbian OS中,CGraphicsDevice类是所有图形设备的基类,它是一个抽象类。Symbian OS中具体的关于图形设备的类图如下所示:
CBitmapDevice定义了位图图形的一组接口。Window Server客户端提供了CWsScreenDevice类,实现对屏幕画图,同时实现了CFbsBitmapDevice用来画一些内存中的位图,如将一幅位图加载到内存中再图出来;另外还有CFbsScreenDevice,用来直接进行屏幕操作,而不用通过Window Server,但不常用。
将图形输出在打印机上和在屏幕上画图类似,只是比较复杂。因为要考虑打印页数、页眉页脚,并且还比较耗费内存。CPrinterDevice提供了打印操作的基本功能。CPrinterDevice封装了一个打印设备,其中包括当打印预览时打印页的坐标转换;选择打印设备并返回其型号。一个设备有一个页面规范,提供页面方向和大小,封装在TPageSpec类中。
图形上下文(graphics context)
图形上下文是一个非常重要的概念,没有它你无法对图形设备画任何东西。图形上下文为图形设备提供了上下文,通俗点讲,就是提供了画图环境。它有一些设置,如画笔、画刷的颜色格式设置以及字体字形的设置,这些设置都是设备无关的。
图形上下文还定义了画图区域,通常情况下不能将图形画在定义的区域外;它同时还包括了很多主要的画图操作。大部分操作都在抽象类CGraphicsContext中定义。这些画图操作包括绘画和填充各种图形如点、直线、曲线、弧形、矩形、多边形、圆形及椭圆形、字体及位图等。
在画图时通常使用CFbsBitGc和CWindowGc,CAnimGc是动画相关的,一般我们不直接创建此对象,而由Window Server创建。
CFbsBitGc类实现了位图图形上下文,它不但可以绘画和填充各种图形,还可以绘制CFbsBitmap对象加载的图片;CWindowGc类是窗口图形上下文,大多画图操作与CFbsBitGc类相同。
通常情况,进行一个画图操作只需:
l 创建一个图形设备对象(CWsScreenDevic或CFbsScreenDevice)
l 创建一个图形上下文对象(CWindowGc或 CFbsBitGc)将其关联到已创建的图形设备对象CWindowGc(CWsScreenDevice* aDevice)或CFbsBitGc::Active(CFbsDevice *aDevice)。
l 按自己的需求进行图形上下文设置(画笔画刷的颜色格式、字形字体、画图区域等)。
l 调用GC的相关操作来画图。