一、不自動調整子控件的寬度(TreeView寬度小於260時)
相信親們用同樣的代碼,顯示效果肯定和Alberl不一樣吧~O(∩_∩)O~
嘿嘿,仔細對比下,看看你們的列表頭背景圖片是下面這樣的么?
細心的小伙伴們應該早就發現了,可以看到右邊那個箭頭並沒有完全顯示出來,這是因為TreeView又調皮啦!
最開始覺得是TreeView沒有自動調整控件的寬度,去看了下代碼,沒啥問題,並且TestApp1里面那個tree也沒出現這種現象,所以就一直以為是自己的XML代碼出了問題。由於對duilib並不熟,所以只是稍微調試了一下,並沒找到問題,就暫時沒管。到后面其他效果都OK了,只剩下這個問題了,當然要解決啦,因為迅雷在不同分辨率下,大小是不一樣的,所以Alberl也模仿了迅雷,結果發現在有些分辨率下,播放列表可以顯示完全。而Alberl只是調整了窗口大小以及播放列表的寬度,再接着將背景圖片放到TestApp1的tree里面,也OK,不過發現拖動TestApp1時,播放列表也有時顯示不完全,再重現了幾次這些情況,立馬就發現問題了,TestApp1在小於一定寬度的時候,播放列表就顯示不全了,按道理不管寬度多寬,子控件的寬度都會自動調整啊,於是量了一下出現問題的寬度,差不多是260左右,接着就去調代碼,發現在CTreeNodeUI的構造函數里有這樣一行代碼:this->SetFixedWidth(250); 和260這么接近,於是就一下子解決了這個問題。嘿嘿,看來一個問題暫時解決不了,隔幾天再過來看是很有道理滴~O(∩_∩)O~
解決方案就是:
將this->SetFixedWidth(250); 注釋掉即可。
二、不自動調整子控件的寬度(TreeNode的高度在一啟動就超過TreeView時)
在Alberl做完整個效果后,又發現了一個bug,
最開始打開播放器的時候是下面這樣的,
好家伙,和迅雷差不多啊?
嗯,這個是正常的,那么我們接着拖入一些文件,
這個時候顯示了垂直滾動條,並且調整了列表的寬度,也是正常的,好家伙,連滾動條都和迅雷一樣了~O(∩_∩)O~
不過當我們關掉軟件,再次打開的時候,就成這樣了:

咦,怎么那三個按鈕顯示到外面去了? 並且點擊無效!
不過觸發一次刷新后,就正常了,比如最小化,或者調整窗口大小。
其實這個並不僅僅是那三個按鈕顯示到外面去了,可以發現表頭的圖片也不顯示箭頭了,很顯然,和上面介紹的那個bug是類似的。
不過經過初步調試,並沒有找到問題,由於Alberl為了繼續寫教程,就沒管這個問題了,去群里問了也沒人回答,可能是因為用TreeView的比較少吧?於是Alberl就繼續寫教程啦~O(∩_∩)O~
這個問題Alberl當然能夠解決,但是Alberl不喜歡重復造輪子,肯定有大神們做過了,不過這個問題也不是什么難解決的問題,所以Alberl希望小伙伴們能夠在Alberl寫完這個教程之前,就提供解決方案~O(∩_∩)O~
當然,如果Alberl寫完這個教程后,還沒人提供的話,就只有去調試了,都做到這一步了,也不差那么一點,干脆就解決它唄。
有心想解決這個問題的大神請注意啦,Alberl在這里提供幾個現象:
1、如果給TreeView顯示滾動條,那么就很容易觀察是否有問題啦。用以下簡單代碼即可復現問題:
<TreeView height="60" bkcolor="#FF00FF00" vscrollbar="true" hscrollbar="true" > <TreeNode height="33" bkcolor="#FF0000FF" /> <TreeNode height="33" bkcolor="#FF00FFFF" /> </TreeView>
所以第一個問題如果加上hscrollbar="true",可以發現只要寬度小於260,就會出現滾動條,這就說明問題復現了,當然,這個問題已經解決啦。
2、第二個問題如果加上vscrollbar="true" ,可以發現只要出現垂直滾動條,問題就復現啦。
這個問題和動態添加或靜態添加TreeNode沒有關系,只要在軟件初始化的時候,加上了TreeNode,當其顯示垂直滾動條的時候,就可以復現問題。
嗯,希望小伙伴們在Alberl寫完教程之前,提供解決方案喲~O(∩_∩)O~
教程接近尾聲啦,第二個bug也解決了,請見http://www.cnblogs.com/Alberl/p/3404393.html