DuiLib中CTileLayoutUI的一个bug
2014-08-05 19:56
627 查看
最近开始练习使用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;
解决过程中未尝试截取效果图,请见谅。
在使用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;
解决过程中未尝试截取效果图,请见谅。
相关文章推荐
- 似乎是一个.Text或者是skin的bug
- Delphi中MediaPlayer控件的一个Bug即修复
- C#析构器的一个Bug
- Windows 2003里的一个小bug?
- [Hibernate]xDoclet生成hbm的一个bug
- .Text Blog .95中一个Unicode的bug
- 一个很好的Java查BUG工具
- OracleParameter 的一个bug
- 我好像又找到MS的一个BUG了,关于正则表达式的
- 用next_permutation()生成r-组合数,兼发现VC7的一个bug
- Visual C++6.0一个小BUG的解决方法
- 一个BugTrack软件,小项目可以应付
- 关于LB论坛的一个BUG的探讨
- 一个用到Boost中time_duration类而产生的bug
- C++ Builder 5 和 6中VCL的一个内存泄漏 BUG
- 一个关于临时对象的BUG(下)
- 发现了MS的datagird的一个bug(经过ms确认了)
- 遇到一个由于事务控制不当造成错误的Bug
- [CVS] 修改CVS Utilities的一个小BUG:cvschroot
- 博客园的一个bug