最新的一些在c或winapi下做界面的库

摘要:
首先,收集一些最近的信息,然后慢慢更新:1、迅雷7的“博尔特”界面引擎只针对界面引擎。迅雷从5岁到7岁;迅雷7的一个显著改进是用户界面。值得注意的是,迅雷7安装界面的滚动条启用了类似于Windows Vista(+)中的光环效果。可以确认,主界面现在位于分层窗口下。似乎Gdi+在处理ClearType文本绘制到半透明位图时存在严重错误。该错误是在任何32位位图上生成的。因此,在分层窗口上绘制也存在此问题。窗口上的每个更改都必须执行UpdateLayered window API。

先把最近看到的一些收录一下,以后慢慢更新:

1、迅雷7的 "Bolt" 界面引擎

(摘一段别人写的)

以下内容仅针对界面引擎
迅雷从5越到了7(其实6是存在的);迅雷7的一个显著改善是UI(User Interface - 用户界面)。

官方博客文章看,界面被放在了特性的第一位,可见对界面的改善是一个重大升级。

关于用户界面的升级:

对于一个终端用户,关注的主要还是下载速度,迅雷7的下载速度基本没啥改善(听说);
不过作为编程圈一员,这个东西不能忽略。我很清楚迅雷的工程师们需要花多少时间在开发这个上面。
(这个界面框架可以说是伟大的,如果我写完了我也一定会高调一下..虽然我很清楚用户大致会无视这番话)

没有迅雷账户(不过现在也是- -||),故之前是通过别人的体验来审视这个UI Engine,大致了解这个界面引擎如下(注:不是完全正确的):

1.迅雷7有很炫的动画效果,并且很流畅
2.迅雷7可以在非Windows Vista(+)上完成Aero特效(QQ不能)
3.迅雷7的界面引擎性能非常高效,时间空间双优化

于是开始好奇迅雷采用的技术(注:这是猜想):

1.如果真有这回事,那么迅雷是怎么让非Aero用户呈现模糊的?
1.1.迅雷用了什么模糊能够完成高效率任务?
1.2.实时模糊很费资源,看上去迅雷用了什么底层的技术成功拦截到了“背景更改”?还是..那低效率的办法?还是..背景更改时无动于衷?
2.迅雷的界面渲染是自绘么?还是建立在系统的基础上?

然后今日逛到了耍下的博客,发现原来迅雷7有破解版,赶紧下载下来 在本机XP上实测。

0.测试环境
CPU: Intel Pentium 4 1.80GHz
内存: 1.50GBytes
显卡: Intel 82845G (这个显卡是够破烂的了。好处是能排除硬件加速)

1.安装
看到了新Logo:蜂鸟~设计得不错.安装界面没有预想中的开启透明等效果,只能干等迅雷7的主界面(= =..)。

值得注意的是,迅雷7的安装界面的滚动条开启了类似于Windows Vista(+)中的光环效果。
效果很炫,不过安装时这个效果有点卡。
安装时我的电脑几乎不能做其他占用CPU略大(>30%)的事情。


2.“登录”
在我的计算机上迅雷7的主界面并没有默认开启阴影和透明,倒是登录窗口已经开启了阴影(嗯,有点希望)。
焦点框转移瞬间图如下:
最新的一些在c或winapi下做界面的库第1张
看看这里有什么效果:

1.阴影
2.蓝色的焦点框很有动感,界面库的全局管理协调确实很到位
3.默认按钮上有一圈动态光晕,效果很棒,超越微软腾讯(个人观点),确实也很流畅

拖动一下,没有任何滞后效果,透明混合得也很流畅,于是关于这个对话框得出结论如下:

1.采用的是LayeredWindow
2.自己绘制了所有控件 包括有点麻烦的文本框
3.采用了类似于Windows的Shell Manager..(不解释)

随便键入用户名密码(仅限于破解版),登录成功进入主界面。
很好 又有一个效果了。登录面板消失得很有动感,先缩小然后放大。似乎也比Aero的好一些。
两次叠加效果图如下:
最新的一些在c或winapi下做界面的库第2张

3.“皮肤主题”
第一眼就见到右上角有一个小衣服的图标.赶紧点开,是意料之中的换肤。
点开后出现第一个惊喜,换肤面板采用了类似于腾讯QQ概念版的翻面效果。(至此已经有2个面板效果了)
翻面瞬间如下:
最新的一些在c或winapi下做界面的库第3张

1.在本机上 翻面看到了 不过大致只看到了8帧左右
2.翻面时,很清楚看到了白色方框倾斜时的锯齿 看来为了加速没有采用图像柔滑处理

终于 看到了开启透明的设置。
(A)点开“开启透明”的瞬间,发现的变化如下:

1.界面卡了1s,看来在准备透明
2.主内容缩小 留出给阴影的部分,效果完成

(B)尝试取消透明 变化如下:

1.原先阴影部分变黑 窗口为矩形
2.窗口四角变为圆角
3.主内容放大 撑满界面

接下来设置透明度,很惊喜,主界面开始透明。不过没有开启模糊(Windows XP) 于是一开始好奇的技术全部删除-.-。
可以确定 主界面现在确实处在了Layered Window下。
1.注意到,迅雷影视部分是一个网页。尝试拖动主窗体,在本机上这个网页部分明显滞后。嗯,还是双窗体。没有什么有意思的技术。

迅雷何时采用LayeredWindow了?
迅雷悬浮窗首先用了这个技术,从单纯的SetLayeredWindowAttributes到后来的UpdateLayeredWindow
接下来是某版本的迅雷的资讯,试验了一下模拟没有模糊的Aero窗体边框

2.观察右侧动态部分的文字,文字看上去不舒服。似乎是Gdi+画的
最新的一些在c或winapi下做界面的库第4张
外一则:Gdi+在处理ClearType文字绘制到半透明位图上有一个较严重的bug
bug产生在任何深入为32位的Bitmap上,因此绘制到LayeredWindow上也有这个问题。

结果如下:
最新的一些在c或winapi下做界面的库第5张
ClearType的文字bug随背景不透明度的增加而改善,如图:
最新的一些在c或winapi下做界面的库第6张
3.有没有注意呢? 迅雷似乎还用了路径文字。
最新的一些在c或winapi下做界面的库第7张
综上,迅雷的新Bolt界面引擎实际情况应该如下:

1.自主进行了透明混合/翻面效果等的计算(MMX & SSE指令集提升计算速度,没有硬件加速)
2.在开启透明时为LayeredWindow,没有开启透明时撤销了WS_EX_LAYERED标志,同时给窗体加上了一个圆角(见上文 A,B)
撤销WS_EX_LAYERED的原因当然是为了加速。
即使LayeredWindow不透明,Windows仍然会混合所有的点,这就造成了速度减慢,而混合所占的CPU是算在程序里的。
3.非Aero下无模糊 (有模糊就要技术了)
4.迅雷的文字似乎是用着Gdi+的 (为什么有人称是FreeType?FT不应该成这样啊..)
5.迅雷自绘了所有控件,其中文本框尚有一些选区bug. 不过效率很不错. 扔了1MB数据进去之后换行延迟比TextBox小.
6.界面动画流畅
注意: 半透明下界面的流畅程度与CPU性能和是否支持MMX指令集有直接关系,因为Windows在混合LayeredWindow时是没有硬件加速的(待确认)。而窗口上的每一个改变都必须执行UpdateLayeredWindow API。

于是,迅雷的界面并不是遥不可及的,我们倘若要山寨一个,或许只是代码写得多一点而已没有任何技术门槛
代码多在何处? 上述中第1及第5点。

迅雷7应用开发在线文档:

http://xldoc.xl7.xunlei.com/

遐想变成现实!Bolt引擎做的俄罗斯方块【开源】

http://yangtai.xunlei.com/?p=2393

2、duilib

最新的一些在c或winapi下做界面的库第8张

http://www.duilib.com/index.html

内首个开源的DirectUI界面库--DuiLib,免费开放是我们的出发点,崇尚完美是我们的动力,共赢互惠是我们追求的目标,年轻活力是我们最大的资本...

DuiLib开发语言为C++,采用纯Win32API,无其他额外依赖;支持图片等资源的压缩,方便携带传播;目前支持的开发平台为vc6-vc10,Demo比较丰富,非常容易上手...(我没用过,这是他们自己介绍的)

3、DirectUI

Microsoft DirectUI Library 微软自家DirectUI开源库
https://github.com/jameskeane/directui

4、

免责声明:文章转载自《最新的一些在c或winapi下做界面的库》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇UIWindow小常识安装openvas下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

duilib CEditUI 禁止输入中文字符,禁止复制粘贴

1、CEditUI 禁止使用中文输入法 在 CEditUI::DoEvent 函数中,添加代码: if(m_bOnlyEnglishChar && m_pWindow && m_pWindow->GetHWND() != NULL) ImmAssociateContext(m_pWindow->Ge...

duilib入门问题集

问:如何把资源放入zip?答: 先SetResourcePath设置资源目录,再SetResourceZip设置压缩资源文件名问:如何设置窗体的初始化大小?答:设置XML文件的Window标签的size属性。问:如何设置鼠标可拖动窗体的范围大小?答:设置XML文件的Window标签的caption属性。问:如何设置窗体可以通过拖动边缘改变大小?答:在窗体创...

基于wke封装的duilib的webkit浏览器控件,可以c++与js互交,源码及demo下载地址

转载请说明原出处,谢谢~~ 前些日子用wke内核封装了duilib的webkit浏览器控件,好多群里朋友私聊我希望可以我公布源码,今天把这个控件的源码和使用demo公布。其实这个控件封装起来没什么难度,我只是按照原来作者的demo,把相应的消息封装成duilib对应的。 在此首先要感谢wke内核的作者BlzFans以及soui2界面库的作者flyhigh,...

duilib之源码分析

《duilib之源码分析》1 stdAfx.h [cpp]view plaincopy *lengthof(x)计算数组长度宏 *MAX两值最大 *MIN两值最小 *CLAMP(x,a,b)x在a,b之间则取x否则取最小 2 UIBase [cpp]view plaincopy *UI_WNDSTYLE_窗口风格属性 *UI_CLASS...

duilib各种布局的作用,相对布局与绝对布局的的意义与用法

转载请说明原出处,谢谢~~ 我使用duilib快3个月了,总体感觉duilib的使用还是较为简单的,只是刚入门时可能有些摸不清头脑。今天写一篇关于duilib的入门日志,大致说一下duilib中的各个布局的作用,以及很关键的相对布局与绝对布局的意义与用法。希望可以帮到使用duilib的新手朋友们。duilib高手就可以直接省略这篇文章了! 我刚使用duil...

duilib中各控件响应的消息类型

消息 说明 Sender click 鼠标点击 CButtonUI dropdown 下拉显示 CComboUI headerclick 点击列标题 CListHeaderItemUI itemactivate   CListElementUI、CListContainerElementUI itemclick 单击选项 CList...