整个教程的代码下载:http://download.csdn.net/detail/qq316293804/6502207

  (由于duilib进阶教程主要介绍界面,所以这个教程只给出界面相关的代码,完整代码请进《仿迅雷播放器教程》)

进阶教程汇总:

duilib进阶教程 -- 在MFC中使用duilib (1)

  duilib的学习到此就差不多啦,现在简短总结下:

一、稳定性:

  目前已发现并解决了四五个bug,不过都属于一下子就能解决的bug,并且都是功能性方面的bug,并不会导致崩溃,已有很多公司用于产品开发,经过了长期的考验,因此稳定性方面已经很不错了。

二、功能性:

  Alberl在做这个播放器的时候,也不敢确定能不能完全实现迅雷那样的效果,现在看来,完全不是问题!

三、易用性:

  看到Alberl这么快就做出了迅雷播放器,还用怀疑易用性么?

四、学习难度:

  Alberl既不是做播放器的,也不是做界面的,只是业余爱好而已,还能一边学习一边写教程,并且在Alberl写了这些教程之后,入门已经没有难点啦,你觉得duilib能有多难学?

五、不方便的地方:

  因为是模仿迅雷播放器,所以这里和迅雷BOLT做一点点对比。

  图片资源都是从迅雷提取出来的,

  duilib有以下几点不便:

  1、Alberl做的最多的工作就是去计算source属性该填哪些值,因为一个按钮通常有四种状态的图标,而很多按钮的大小都不一样,所以这里对每个按钮都要计算其source属性,很不方便。

  这里有一个简单的解决方案,加上属性 splitimage="true"则说明此图片需要被分成四个部分显示。规定图片的四个部分依次按normalimage、hotimage、pushedimage、focusimage排列,程序就自动计算每个图片的位置,就无需在XML填写source位置啦~

  而且之后就算按钮大小变了,或者图片大小变了,都不需要改动XML。

  2、其次就是图片默认被拉伸了,很显然,绝大部分图片是不需要被拉伸的,有些按钮的大小和图片的大小并不一样,虽然dest属性可以解决这个问题,但是也很不方便,所以默认不应该被拉伸,并且图片垂直水平都居中,如果想要拉伸,则指定scaleimage="true"。 这就方便多啦。

  3、Slider控件的图片问题,进度条图片被放大到和整个控件的高度一样,这时的解决方案是,比如控件高度为20,图片高度为3,则需要把图片调成高度为20,其他17个高度都做成透明。如果控件高度调成40,那么图片又要调整。  所以可以加一个属性imageheight="3",这样Slider控件自动将图片垂直居中,或者无需指定imageheight属性,代码自动判断高度。

  4、部分属性不全,比如编辑框有FocusBordColor,却没有HotBordColor,这样要实现迅雷那样的编辑框,只能指定一个HotImage属性,显然也不方便。还有很多Color属性都不全,就不一一指出了。

  5、按钮状态切换时,只能指定一个图片,迅雷每个按钮除了切换hotimage以外,按钮的下面还有一个蓝色的光影,显然这个光影是可以重用的,说明迅雷的按钮切换时至少可以切换两张图片。并且那个光影可以显示在按钮外面,可以看到光影的宽度明显比按钮宽,甚至延长到了旁边的按钮下面。 这个改动可能涉及到核心,因此不建议去改,改一下图片就可以了。

  不过以上几点都是很容易实现的,因此实际项目使用中,可以花几天时间把以上几点实现了,后面开发就更方便啦~

  当然,这只是开发迅雷播放器中遇到的问题,开发其他项目可能会遇到其他问题。

  由于Alberl只是业余人士,就不做这些改进了。

  从实现效果来看,迅雷BOLT显然更成熟,更全面。但由于迅雷BOLT并不开源,而duilib也已经够用了,虽然提了这几点不便,但都是很容易解决的,也就说duilib已经非常方便了。

  可以看到Alberl做的播放器和迅雷看看的相似度达到95%以上,再往细节里做一下就可以以假乱真啦~O(∩_∩)O~

  Alberl在最开始也说了,选择从这个库开始研究,最主要的原因是因为很多大公司都用了它,所以Alberl在不知道哪个库好用的情况下,就跟着大牛走啦~O(∩_∩)O~

相信在看了Alberl的教程以及作品之后,对duilib应该心中有数了吧。

最后,祝小伙伴们学习愉快~O(∩_∩)O~

duilib进阶教程 -- 总结 (17)的更多相关文章

  1. duilib进阶教程 -- Container控件的bug (14)

    在<duilib进阶教程 -- TreeView控件的bug (9)>里,Alberl发现了两个bug,并解决了其中一个,现在教程已经接近尾声啦,所以Alberl就解决了另外一个bug. ...

  2. duilib进阶教程 -- 在MFC中使用duilib (1)

    由于入门教程的反响还不错,因此Alberl就以直播的形式来写<进阶教程>啦,本教程的前提: 1.请先阅读<仿迅雷播放器教程> 2.要有一定的duilib基础,如果还没,请先阅读 ...

  3. duilib进阶教程 -- TreeView控件(6)

    代码下载:http://download.csdn.net/detail/qq316293804/6483905 上一个教程中,界面已经和迅雷一模一样啦,大小和位置一个像素都不差哟,亏得Alberl调 ...

  4. duilib进阶教程 -- Container控件 (3)

    前面两个教程的目的是教大家与MFC结合,那么从这篇起,将不再使用MFC,而使用纯win32项目,本文的所有知识已经在<duilib入门教程>里面讲过了,因此基础知识不再赘述. 代码下载:h ...

  5. duilib进阶教程 -- 各种控件的响应 (10)

    到上一个教程为止,界面显示的代码就都介绍完啦,现在开始介绍控件的响应,其实在<2013 duilib入门简明教程 -- 事件处理和消息响应 (17)>里已经列出了duilib自己定义的所有 ...

  6. duilib进阶教程 -- 改进List控件 (16)

    一.控件隐藏后,允许用代码操作所有行为. 在做播放器的时候,最常用的功能莫过于顺序播放.随机播放了,而当我们切换歌曲的时候,显然应该选中该歌曲,List的选中函数是SelectItem,但是调用此函数 ...

  7. duilib进阶教程 -- 设置资源路径 (15)

    在前面的教程里,虽然图片都放到了skin文件夹里,但是XML却都在外面,当XML比较多时,就不太好看啦,如下图: 所以需要整理一下,将XML也放入skin文件夹,这样exe的目录就简洁多了: 将XML ...

  8. duilib进阶教程 -- 响应windows原生消息和自定义消息(13)

    一.windows原生消息 同样,入门教程只是给出了响应windows原生消息的方法,并没给出例子,这里以自适应屏幕分辨率为例.迅雷播放器虽然可以在启动的时候自动调整窗口大小,但是当屏幕分辨率实时改变 ...

  9. duilib进阶教程 -- 在duilib中使用MFC (2)

    好人做到底,送佛送到西.虽然上一篇教程已经说得很详细了,但Alberl还是再举一个例子.上一篇教程的主窗口是MFC的,所以这篇教程把主窗口换成duilib的~O(∩_∩)O~ 1.我们利用<20 ...

随机推荐

  1. 设置input 内容居中显示 .

    text-align:center  水平居中显示 <style type="text/css"> input.text{text-align:center;paddi ...

  2. eclipse的ssh框架详解

    1.创建项目 2.导包 1.1:导入Struts2可能用到的包: 先从网站下载 再这里找出,打开它把WEB-INF/lib/下的所有包导入项目   1.2:导入spring可能用到的包: 先从网站下载 ...

  3. Sublime text 3安装svn插件

    这几天在研究sublime text 3的使用,感觉还不错,现在想让他能够支持svn,所以就写一下怎么安装svn插件吧~ 首先先说一下这个官方的插件网站 点我进入~ 进入之后,最上边的第一个就是点击安 ...

  4. STS 代码提示快捷键 和 注解提示的修改

    window->Preferences window->Preferences

  5. 让spark运行在mesos上 -- 分布式计算系统spark学习(五)

    mesos集群部署参见上篇. 运行在mesos上面和 spark standalone模式的区别是: 1)stand alone 需要自己启动spark master 需要自己启动spark slav ...

  6. 理解AOP

    http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html Aspect Oriented Programming  面向切面编程. ...

  7. AsyncTask源码分析

    在Android中,主线程是UI线程,当需要根据其他数据进行更新UI时,如果获取数据的操作比较耗时的话,会触发ANR,所以我们应该讲耗时的操作进行异步操作,尤其是请求网络数据的操作应该放在后台线程进行 ...

  8. [php-src]窥探Php内核中的变量

    内容均以php-5.6.14为例. 在看各种组合数据类型之前,有必要先熟悉下 Zend/zend_types.h 里面的自定义数据类型. #ifndef ZEND_TYPES_H // 防止多次 in ...

  9. Educational Codeforces Round 10

    A:Gabriel and Caterpillar 题意:蜗牛爬树问题:值得一提的是在第n天如果恰好在天黑时爬到END,则恰好整除,不用再+1: day = (End - Begin - day0)/ ...

  10. JS原生方法实现瀑布流布局

    html部分(图片都是本地,自己需要改动图片) p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 30.0px Consolas; color: #2b7ec ...