什么是DirectUI?
<p>一:DirectUI=无句柄?
这个说法其实是错误的,窗体是否采用了DirectUI,我们只要看看窗体风格里是否有WS_EX_LAYERED分层风格,
一旦有此风格,就肯定是DirectUI,当然那种双窗体方式不在我们的讨论范围内,像AlphaControl 现在还在用此方法实现窗体阴影,所以我们拉伸它的窗体,动作快的话会发现边框和窗体会有空白出现。almdev的早期产品也是此方法,后期在Win10上采用了f新的方法实现阴影,但是在win10以前的系统就无法显示阴影了。FoxUI不管是传统方式还是DirectUI在Winxp-Win10上表现都是统一的。</p>
<p>二:为啥标准组件在DirectUI上显示不了?
原因是采用了WS_EX_LAYERED分层风格后,系统的WmPaint消息就会失效,所以标准控件无法在这种窗体上显示,这也解释了为啥
所有的DirectUI库都要使用自身的组件才能在窗体上使用。当然FoxUI的组件是横跨标准方式和DirectUI方式的。</p>
<p>三:我们在什么情况下应该使用DirectUI?
1:你需要不规则窗体,传统窗体实现不规则非常麻烦,需要creatergn 生成mask,而且不支持Png图片,这样我们还需要扣图,由于不支持Alpha过渡,在边缘肯定会出现毛边,我们现在在大部分界面组件库上还能看到这些问题。而DirectUI因为支持窗体透明层,可以直接使用Png图片,这样就完美的解决了此问题。</p>
<p>2:你界面逻辑复杂,需要更快的反应速度,DirectUI由于不使用传统的Windows绘制机制,所以节约了大量无效绘制,
从而加快了界面响应速度,像大公司的产品如 腾讯,360,迅雷等等都是采用了此项技术。</p>
<p>3:你需要更炫的界面表现,由于DirectUI本质就是把所有效果显示在一张图上,也就是意味着它其实和游戏是一样的,
你可以使用大量的图像技术对这张界面图进行操作,任意透明,任意变换,界面想多炫就看你自己的想象力了。
比如FoxUI采用Blur效果
<img src="https://www.showdoc.cc/server/api/common/visitfile/sign/23fc9c4308a9e548dc9eb5f42e389b02?showdoc=.jpg" alt="" /></p>