DirectUI,标准界面的又一次挑战!

来源:互联网 发布:ubuntu 默认密码 编辑:程序博客网 时间:2024/05/23 23:37
 DirectUI 现在开始火了,它最早出现在微软的msn上,现在此技术已经应用到office等大型产品中。

国内近来随着知名的qq,迅雷采用此技术,更是把DirectUI彻底推向了前台。那么什么叫DirectUI ?你真的需要DirectUI 吗?

我们先说说DirectUI的原理,DirectUI顾名思义就是界面直接呈现,国外也称为winHandle-less,就是句柄少的意思。

那么它为什么能直接呈现界面而且句柄少呢,我们先从windows标准界面说起,我们都知道windows每个控件都有一个句柄,系统通过发送消息到控件这个句柄来完成消息传递。那么如果句柄少,消息传递就少,自然效率就高一些,这个也是DirectUI 的好处之一,当然这个不是DirectUI 主要的目的。因为标准控件在DirectUI 下是无法显示的,虽然所有消息都能收到,但是最关键的WM_Paint消息在使用UpdateLayeredWindow后失效了。这就要求所有的控件在DirectUI 下都需要模拟,那么就突破了标准控件的一些限制,能呈现更好的视觉效果。也许这里就有人要问为什么要用UpdateWindowsLayer呢?不用UpdateLayeredWindow那么标准控件不是都可以用了吗?这就要从一些实际需求来解释这个问题,一个最简单的要求就是有些软件需要窗体背景透明但是窗体里的内容不透明,这个时候按传统的方法你怎么做呢?通过SetLayeredWindowAttributes设置透明度

你会发现窗体里所有控件的透明度也跟窗体一样了,这显然不符合要求,那么怎么办呢,以前比较灵活的做法就是双窗体方法,这个方法很多地方都有讲述,我这就解释了,这也不是我们今天讨论的话题,因为它不是真正的DirectUI ,根据这个原理大家就能容易的区分一个程序是否是DirectUI ,用spy++看窗体上的控件,如果基类不是微软的标准控件,那么就有可能采用了DirectUI 。

什么样的应用程序可以用directui呢?1界面要求漂亮的,2更新频率比较低的(因为界面刷新一次就需要把所有控件重绘一次)这也是好多视频播放器不采用的原因。3控件类型少的,控件类型越多意味着你需要模仿的控件也越多,工作量自然加大了。4,窗体上控件尽量少,越少画的内容也就自然少了,效率就上去了。

 

文章最后贴一个在xp下的directui表现,这也是directui的好处就是xp,vista,win7界面效果都是一致的