第二十篇:在SOUI中使用分层窗口
从Windows 2K开始,MS为UI开发引入了分层窗口这一窗口风格。使用分层窗口,应用程序的主窗口可以是半透明,也可以是逐点半透明(即每一个像素点的透明度可以不同)。
可以说,正是因为有了分层窗口,在Windows上开发的应用程序的UI才真正炫起来。
在UI的主窗口上加一个分层窗口的风格对于一个稍有点UI开发经验的程序员来说是非常简单的,本篇要说的是在SOUI的窗口系统中实现SOUI的分层窗口。
正如使用系统的窗口已经可以实现很漂亮的UI,我们还是会需要DirectUI这样的UI开发技术;有了系统的分层窗口,我们还是会需要在DirectUI Window之间的分层窗口技术。
一个DirectUI系统的分层窗口有什么用呢?
分层窗口和一般窗口的关键区别在在于:一个分层窗口是一个相对独立的渲染层,它能将它的子窗口渲染到这个窗口上,当所有分层窗口都渲染完成后,再按照分层窗口的zorder顺序通过不同的alpha混合技术进行混合;而一般的DirectUI系统只有一个渲染层,所有窗口按照zorder顺序依次渲染到这个渲染层上,缺少了不同渲染层的概念。
一个简单的例子:业务可能希望一个功能面板能够整体半透明,该功能面版可能包含很多子窗口。
如果没有分层窗口特性,在DirectUI中实现类似的需求很很复杂(如分别指定每一个子窗口的半透明)而且可能导致性能下降、内存消耗的提高等问题。
如果有了分层窗口,实现类似的需求就非常简单了:只需要为该功能面板指定一个透明度就行了。在渲染的时候,功能面板的子窗口会以正常的渲染方式渲染到分层窗口的缓存上,全部渲染完成后,再整体和上一个渲染层混合,从而得到期望的效果。
在SOUI里如何使用分层窗口:
SOUI采用XML定义UI,要定义分层窗口只需要一个layeredWindow="1"的属性即可。
XML定义:
<window pos="0,0,-0,-0" clipClient="1" skin="skin_bkgnd" >
<flywnd pos="-210,10,-0,-10" posEnd="-10,10,@210,-10" alpha="100" layeredWindow="1">
<toggle pos="0,|-15,@10,@30" skin="_skin.sys.tree.toggle" name="switch" cursor="hand" tip="click me to show the animator that show or hide the pane"></toggle>
<window pos="10,0,-0,-0" colorBkgnd="#ff0000">
<treectrl pos="10,0,-10,-10" name="mytree2" itemHeight="30" iconSkin="skin_tree_icon" checkBox="1" font="underline:1">
<item text="组织机构" img="0" selImg="1" expand="0">
<item text="市场部" img="0" selImg="1">
<item text="南一区" img="2"/>
<item text="北二区" img="2"/>
<item text="西三区" img="2">
<item text="第一分队" img="0" selImg="1" expand="0">
<item text="张三组" img="2"/>
<item text="李四组" img="2"/>
<item text="王五组" img="2"/>
</item>
</item>
</item>
</item>
<item text="宣传部" img="0" selImg="1" expand="0">
<item text="南一区" img="2"/>
<item text="北二区" img="2"/>
<item text="西三区" img="2"/>
</item>
</treectrl> <text pos="10,-100,-0,@100" multilines="1">click the left grip to \nshow or hide the \npane</text>
</window>
</flywnd>
</window>
显示效果:

第二十篇:在SOUI中使用分层窗口的更多相关文章
- Egret入门学习日记 --- 第二十篇(书中 9.1~9.3 节 内容 组件篇)
第二十篇(书中 9.1~9.3 节 内容 组件篇) 第八章中的内容. 以上都是基本的Js知识,我就不录入了. 直接来看 第9章. 开始 9.1节. 以上内容告诉你,Egret官方舍弃了GUI,使用了E ...
- 第二十一篇:SOUI中的控件注册机制
Win32编程中,用户需要一个新控件时,需要向系统注册一个新的控件类型.注册以后,调用::CreateWindow时才能根据标识控件类型的字符串创建出一个新的控件窗口对象. 为了能够从XML描述的字符 ...
- Python之路【第二十篇】:待更新中.....
Python之路[第二十篇]:待更新中.....
- Python开发【第二十篇】:缓存
Python开发[第二十篇]:缓存redis&Memcache 点击这里 Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy ...
- Egret入门学习日记 --- 第十篇(书中 2.9~2.13节 内容)
第十篇(书中 2.9~2.13节 内容) 好的 2.9节 开始! 总结一下重点: 1.之前通过 ImageLoader 类加载图片的方式,改成了 RES.getResByUrl 的方式. 跟着做: 重 ...
- 第二十八篇:SOUI中自定义控件开发过程
在SOUI中已经提供了大部分常用的控件,但是内置控件不可能满足用户的所有要求,因此一个真实的应用少不得还要做一些自定义控件. 学习一个新东西,最简单的办法就是依葫芦画瓢.事实上在SOUI系统中内置控件 ...
- 第二十七篇:SOUI中控件属性查询方法
SOUI项目的SVN根目录下有一个doc目录,下面有一份控件属性表.包含了大部分控件的大部分属性,不过也不一定完全准确.最保险的办法还是查源代码. SOUI对象包含控件及ISkinObj等从SObje ...
- 第二十篇 .NET高级技术之C#中的线程(二) 线程同步基础
1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具: 简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...
- Python之路【第二十篇】Tornado框架
Tornado Tornado是使用Python编写的一个强大的.可扩展的Web服务器.它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中. 我 ...
随机推荐
- espcms内容页相册调用代码
{%forlist from=$photo key=i%} <li style="position: absolute; width: 600px; left: 0px; top: 0 ...
- JavaScript——特殊点总结
首先,== equality 等同,=== identity 恒等. ==, 两边值类型不同的时候,要先进行类型转换,再比较. ===,不做类型转换,类型不同的一定不等. 下面分别说明: 先说 === ...
- Find celebrity
Suppose you are at a party with n people (labeled from 0 to n - 1) and among them, there may exist o ...
- Shortest Palindrome
Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...
- UIImage 在某些控件上被放大问题
今天用到了UISlider,想利用slider.setThumbImage(UIImage(named:"aaa"), forState: UIControlState.Norma ...
- NHibernate实战详解(一)领域模型设计
关于NHibernate的资料本身就不多,中文的就更少了,好在有一些翻译文章含金量很高,另外NHibernate与Hibernate的使用方式可谓神似,所以也有不少经验可以去参考Hibernate. ...
- 【matlab】libsvm-3.18安装与使用
安装 1. 在http://www.csie.ntu.edu.tw/~cjlin/ 中下载libsvm 2. 按照http://zjhello123.blog.163.com/blog/static/ ...
- HDU 5881 Tea -2016 ICPC 青岛赛区网络赛
题目链接 题意:有一壶水, 体积在 L和 R之间, 有两个杯子, 你要把水倒到两个杯子里面, 使得杯子水体积几乎相同(体积的差值小于等于1), 并且使得壶里剩下水体积不大于1. 你无法测量壶里剩下水的 ...
- ios block中引用self
__block __weak typeof(self) tmpSelf = self; ^(){ tmpSelf...... }
- ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(四) 之 用户搜索(Elasticsearch),加好友流程(1)。
前面几篇基本已经实现了大部分即时通讯功能:聊天,群聊,发送文件,图片,消息.不过这些业务都是比较粗犷的.下面我们就把业务细化,之前用的是死数据,那我们就从加好友开始吧.加好友,首先你得知道你要加谁.L ...