爱悠闲 > DuiLib中CTileLayoutUI的一个bug

DuiLib中CTileLayoutUI的一个bug

分类: DuiLib使用  |  标签: DuiLib,CTileLayout,CListContainerElemen,子控件位置  |  作者: whuavon 相关  |  发布日期 : 2014-12-02  |  热度 : 94°

最近开始练习使用DuiLib来构造自己项目的View层,这是一个很强大的界面库,感谢各位开源者。

在使用CTileLayout作为控件容器的时候,发现加载进去的CTileLayout控件并不能正确的根据窗口大小来调整子控件(CListContainerElementUI)的显示位置而达到一个合理的显示效果。

经过调试发现是CTileLayout类中SetPos()函数导致的这个问题。

首先是计算列数的部分,原代码为:

// Position the elements

if(m_szItem.cx > 0 )m_nColumns = (rc.right -rc.left) / m_szItem.cx;

if(m_nColumns == 0 ) m_nColumns = 1;


这段代码并未考虑如果设置了“childpadding”属性,尝试修改为如下代码后解决了列数计算的问题:

if (m_szItem.cx > 0)m_nColumns = (rc.right -rc.left) / m_szItem.cx;

if (rc.right -rc.left - (m_nColumns *m_szItem.cx) < (m_nColumns-1) *m_iChildPadding)

{

m_nColumns--;

}

if(m_nColumns <= 0 ) m_nColumns = 1;


继续调试发现在计算每一列的子控件的占位宽度时,竖向滚动条所占的空间并未被正确处理,原代码为:

if(m_pHorizontalScrollBar && m_pHorizontalScrollBar->IsVisible() ) 

cxWidth = (rc.right -rc.left + m_pHorizontalScrollBar->GetScrollRange() ) /m_nColumns


修改为如下代码后问题解决:

if(m_pHorizontalScrollBar && m_pHorizontalScrollBar->IsVisible() ) 

cxWidth = (rc.right -rc.left - m_pHorizontalScrollBar->GetScrollRange() ) /m_nColumns


解决过程中未尝试截取效果图,请见谅。



同类文章:DuiLib使用