17.7.5 透明窗口
在Symbian操作系统v8.0之前,所有窗口都是不透明的。换句话说,屏幕上每个像素的绘制颜色来自于单个窗口,即当时屏幕上的以z次序而言最上面的窗口。
Symbian操作系统v8.0加入了对透明窗口的支持。一个应用程序在激活其窗口之前可以声明希望自身是透明的。这可以通过关联一个在0~255之间的值到窗口的每个像素上实现。这个值就是通常所说的 alpha 值,窗口被说成是“alpha 混合的”。当在窗口上绘制时,这个值用来混合最上面窗口的颜色和它下面窗口的颜色(如果该窗口也是透明的,那么混合它下面的窗口的颜色)。如果值是255,那么只能看到最上面窗口的颜色;如果是0,只能看到下面窗口的颜色。对于中间值,混合两个颜色,权重由特定值决定。为了让窗口透明,必须调用下面两个函数中的一个。
如果使用 SetTransparencyBitmap(),那么位图应该是灰阶的位图,窗口服务器从位图中读取值作为alpha值。位图的像素和窗口的像素一对一匹配。如果在一个或两个维度上位图比窗口小,那么它平铺于窗口区域。使用SetTransparencyFactor()指定的单个颜色(也必须是灰色的)将为窗口的每个像素用作alpha值(因此透明度在整个窗口区域是一致的)。
在Symbian操作系统v8.1中添加了使窗口透明的另一个方法。这个方法只在屏幕颜色模式选择包含alpha值时起作用。在这个模式下,对于每个像素,除了红、绿、蓝组件信息,aplha值也被保存。当前唯一支持它的显示模式是 EColor16MA。为使用这个方法使窗口透明,需要在激活窗口前调用下面的函数:
为用这种透明度在窗口上绘制,需要设置使用的画笔和画刷的 alpha 值。它们控制着已经以相关像素表现的颜色显示了多少,你绘制的颜色能看到多少。已经存在的颜色可能来自底下的窗口(或者一些窗口)或者来自对于同一个窗口之前的绘制命令。
只有某一些设备支持透明窗口,如果不支持这个功能,那么 SetTransparency 函数就返回KErrNotSupported 值。为支持透明窗口,窗口服务器必须配置它为处理这些窗口所需的资源,这些资源是在手机启动时确定的。
【责任编辑:
董书 TEL:(010)68476606】