整個教程的代碼下載: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~