duilib进阶教程 -- 总结 (17)
整个教程的代码下载: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)的更多相关文章
- duilib进阶教程 -- Container控件的bug (14)
在<duilib进阶教程 -- TreeView控件的bug (9)>里,Alberl发现了两个bug,并解决了其中一个,现在教程已经接近尾声啦,所以Alberl就解决了另外一个bug. ...
- duilib进阶教程 -- 在MFC中使用duilib (1)
由于入门教程的反响还不错,因此Alberl就以直播的形式来写<进阶教程>啦,本教程的前提: 1.请先阅读<仿迅雷播放器教程> 2.要有一定的duilib基础,如果还没,请先阅读 ...
- duilib进阶教程 -- TreeView控件(6)
代码下载:http://download.csdn.net/detail/qq316293804/6483905 上一个教程中,界面已经和迅雷一模一样啦,大小和位置一个像素都不差哟,亏得Alberl调 ...
- duilib进阶教程 -- Container控件 (3)
前面两个教程的目的是教大家与MFC结合,那么从这篇起,将不再使用MFC,而使用纯win32项目,本文的所有知识已经在<duilib入门教程>里面讲过了,因此基础知识不再赘述. 代码下载:h ...
- duilib进阶教程 -- 各种控件的响应 (10)
到上一个教程为止,界面显示的代码就都介绍完啦,现在开始介绍控件的响应,其实在<2013 duilib入门简明教程 -- 事件处理和消息响应 (17)>里已经列出了duilib自己定义的所有 ...
- duilib进阶教程 -- 改进List控件 (16)
一.控件隐藏后,允许用代码操作所有行为. 在做播放器的时候,最常用的功能莫过于顺序播放.随机播放了,而当我们切换歌曲的时候,显然应该选中该歌曲,List的选中函数是SelectItem,但是调用此函数 ...
- duilib进阶教程 -- 设置资源路径 (15)
在前面的教程里,虽然图片都放到了skin文件夹里,但是XML却都在外面,当XML比较多时,就不太好看啦,如下图: 所以需要整理一下,将XML也放入skin文件夹,这样exe的目录就简洁多了: 将XML ...
- duilib进阶教程 -- 响应windows原生消息和自定义消息(13)
一.windows原生消息 同样,入门教程只是给出了响应windows原生消息的方法,并没给出例子,这里以自适应屏幕分辨率为例.迅雷播放器虽然可以在启动的时候自动调整窗口大小,但是当屏幕分辨率实时改变 ...
- duilib进阶教程 -- 在duilib中使用MFC (2)
好人做到底,送佛送到西.虽然上一篇教程已经说得很详细了,但Alberl还是再举一个例子.上一篇教程的主窗口是MFC的,所以这篇教程把主窗口换成duilib的~O(∩_∩)O~ 1.我们利用<20 ...
随机推荐
- PHP数组的知识
- Hosting static website on AWS
http://docs.aws.amazon.com/AmazonS3/latest/dev/website-hosting-custom-domain-walkthrough.html#root-d ...
- if条件里比较浮点数
晚上看会儿书,基础的东西,很多都不熟练,不得不佩服那些人真的很厉害,为啥会想到那些,我这傻脑袋是想不到,暂时...... 比较3.3333与3 #!/bin/bash var1=`echo " ...
- poj 2823 Sliding Window (单调队列入门)
/***************************************************************** 题目: Sliding Window(poj 2823) 链接: ...
- redis学习(二) Redis Hash
Redis hash 是一个string类型的field和value的映射表,hash特别适合用于存储对象. Redis 中每个 hash 可以存储 232 - 1 键值对(40多亿). redis ...
- 数据库(表)的逻辑备份与恢复<四>
数据库(表)的逻辑备份与恢复 介绍 逻辑备份是指使用工具 export 将数据对象的结构和数据导出到文件的过程,逻辑恢复是指当数据库对象被误操作而损坏后使用 工具 import 利用备份的文件把数 ...
- 苹果会在明后年推出13寸屏iPad吗?
摘要:苹果推大屏iPad的传闻由来已久,近日有国外媒体再次撰文称,这种大屏iPad不仅是苹果Mac继任者,同时也是Surface的有利竞争者……这真的可能吗?这只是分析师的捕风捉影,还是真有这种可能? ...
- 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
public class Three_03 { public static void main(String[] args) { for(int i=100;i<1000;i++){ int a ...
- List集合 导出 Excel
public string CreateAdvExcel(IList<DocAdvInfo> lt) { StringBuilder builder = new StringBuilder ...
- Java入门1day
Java安装及环境变量配置 1.安装 2.环境变量配置 1) 右击"计算机"-->属性(R)-->高级系统设置-->高级-->环境变量 2) 系统变量(或用 ...