从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中使用分层窗口的更多相关文章

  1. Egret入门学习日记 --- 第二十篇(书中 9.1~9.3 节 内容 组件篇)

    第二十篇(书中 9.1~9.3 节 内容 组件篇) 第八章中的内容. 以上都是基本的Js知识,我就不录入了. 直接来看 第9章. 开始 9.1节. 以上内容告诉你,Egret官方舍弃了GUI,使用了E ...

  2. 第二十一篇:SOUI中的控件注册机制

    Win32编程中,用户需要一个新控件时,需要向系统注册一个新的控件类型.注册以后,调用::CreateWindow时才能根据标识控件类型的字符串创建出一个新的控件窗口对象. 为了能够从XML描述的字符 ...

  3. Python之路【第二十篇】:待更新中.....

    Python之路[第二十篇]:待更新中.....

  4. Python开发【第二十篇】:缓存

    Python开发[第二十篇]:缓存redis&Memcache   点击这里 Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy ...

  5. Egret入门学习日记 --- 第十篇(书中 2.9~2.13节 内容)

    第十篇(书中 2.9~2.13节 内容) 好的 2.9节 开始! 总结一下重点: 1.之前通过 ImageLoader 类加载图片的方式,改成了 RES.getResByUrl 的方式. 跟着做: 重 ...

  6. 第二十八篇:SOUI中自定义控件开发过程

    在SOUI中已经提供了大部分常用的控件,但是内置控件不可能满足用户的所有要求,因此一个真实的应用少不得还要做一些自定义控件. 学习一个新东西,最简单的办法就是依葫芦画瓢.事实上在SOUI系统中内置控件 ...

  7. 第二十七篇:SOUI中控件属性查询方法

    SOUI项目的SVN根目录下有一个doc目录,下面有一份控件属性表.包含了大部分控件的大部分属性,不过也不一定完全准确.最保险的办法还是查源代码. SOUI对象包含控件及ISkinObj等从SObje ...

  8. 第二十篇 .NET高级技术之C#中的线程(二) 线程同步基础

    1.同步要领 下面的表格列展了.NET对协调或同步线程动作的可用的工具:                       简易阻止方法 构成 目的 Sleep 阻止给定的时间周期 Join 等待另一个线程 ...

  9. Python之路【第二十篇】Tornado框架

    Tornado Tornado是使用Python编写的一个强大的.可扩展的Web服务器.它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中. 我 ...

随机推荐

  1. ssh免密码登陆设置

    服务器端 CentOS 6.5下编辑/etc/ssh/sshd_config MacOSx下编辑/etc/sshd_config #开启公钥验证 RSAAuthentication yes Pubke ...

  2. spring + myBatis 常见错误:@Autowired注解失败

    今天配置spring+myBatis的时候,使用注解@Autowired把持久层dao注入service层的时候总是报错. 查了好久才发现,居然是配置文件路径写错了.basepackge的路径一定要正 ...

  3. 手动安装python后,交互模式下退格键乱码

    没有安装readline相关的模块 yum install readline readline-devel 再重新变异安装python就可以了

  4. linux下的audit服务

    audit   ['ɔːdɪt]  审计 auditd是linux的一个审计服务. 这是man下的解释 auditd is the userspace component to the Linux A ...

  5. jquery 常用的备忘

    1.table 取  tr 的 id值 <table class="table table-striped table-hover table-bordered" id=&q ...

  6. eclipse中手动导入DTD文件的方式

    DTD一般应用在应用程序中定义数据交换类型的文档,一般用在xml配置文件中,有些时候在eclipse中并不能加载一些提示,这个时候需要手动导入,导入方法如下: 1.首先根据声明的网址下载.dtd的文件 ...

  7. 关于TortoiseSVN的一些知识

    TortoiseSVN的一切命令都是相对于它自己来说的 1.Import,导入,指的是导入SVN的代码库,即Repository. 2.Export,导出,指的是将代码从Repository中导出到你 ...

  8. Effective C++ -----条款03:尽可能使用const

    如果关键字const出现在星号左边,表示被指物是常量:如果出现在星号右边,表示指针自身是常量:如果出现在星号两边,表示被指物和指针两者都是常量. char greeting[] = " he ...

  9. ajax 删除一条数据

    代码: 对这一段话的理解:先找到需要删除的节点,以及节点里的文本:用Ajax 发送请求,请求方式为POST ,请求内容为需要删除记录的文件,dataType定义数据类型Json,通常都是Json,da ...

  10. iOS-WKWebView携带cookie发送http请求,cookie失效

    发送请求代码: NSString *testUrl = @"http://10.22.122.7:8081/test2_action/view_index"; NSURL *url ...