整个教程的代码下载: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. [其他] 蒙特卡洛(Monte Carlo)模拟手把手教基于EXCEL与Crystal Ball的蒙特卡洛成本模拟过程实例:

    http://www.cqt8.com/soft/html/723.html下载,官网下载 (转帖)1.定义: 蒙特卡洛(Monte Carlo)模拟是一种通过设定随机过程,反复生成时间序列,计算参数 ...

  2. 学习Spring必学的Java基础知识

    [1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http: ...

  3. 技术英文单词贴--P

    P pagination 分页,页码 parse 解析,从语法上描述或分析 partial 局部的 pattern 模式 populate 填充,居住于,构成人口 precedence 优先 pref ...

  4. andorid SQLite数据库的增删改查 和事务操作

    .xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  5. 使用 BeanCopier 复制对象

    Cglib是一款比较底层的操作java字节码的框架. BeanCopier是一个工具类,可以用于Bean对象内容的复制. 复制Bean对象内容的方法有很多,比如自己手动get set ,或者使用Pro ...

  6. [PHP] php实现文件下载

    1. 设置超链接的href属性 <a href="文件地址"></a> 如果浏览器不能解析该文件,浏览器会自动下载.而如果文件是图片或者txt,会直接在浏览 ...

  7. 修改默认MYSQL数据库data存放位置

    随着业务量的增长,mysql默认安装所在分区大小出现瓶颈,通常需要将datadir换到较大的分区 示例原目录:/usr/local/mysql/data/示例新目录:/data/mysqldata/ ...

  8. Android性能优化方法(六)

    ContentProvider优化改进 1.索引简单的说,索引就像书本的目录,目录可以快速找到所在页数,数据库中索引可以帮助快速找到数据,而不用全表扫描,合适的索引可以大大提高数据库查询的效率.(1) ...

  9. fgetc和fputc函数

    1.输入函数 以下三个函数可用于一次读一个字符. #include <stdio.h> int getc( FILE *fp ); int fgetc( FILE *fp ); int g ...

  10. UVA 11732 strcmp() Anyone? (压缩版字典树)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...