duilib进阶教程 -- Container控件的bug (14)
来源:互联网 发布:暗物质 暗能量知乎 编辑:程序博客网 时间:2024/05/21 08:57
在《duilib进阶教程 -- TreeView控件的bug (9)》里,Alberl发现了两个bug,并解决了其中一个,现在教程已经接近尾声啦,所以Alberl就解决了另外一个bug。
Bug现象:
第一次启动软件时,由于播放列表并没有文件,所以没有显示垂直滚动条,当我们拖入文件后,就显示了垂直滚动条,这个时候会自动调整子控件的宽度,于是一切显示正常。
但是当我们第二次启动软件时,由于软件会加载文件到播放列表,所以一开始就显示了垂直滚动条,但这个时候并没有自动调整子控件的宽度,所以子控件显示到了列表的外面,如图:
其实不仅TreeView有问题,而且List也有问题,用如下代码
启动时,效果如图:
最小化一次后,效果如图:
原因:
其实这是Container的bug,而List继承于Container,Tree继承于List,所以凡是继承于Container的控件都有这个bug。因为刚启动时,滚动条Visible的初始状态是true,刷新一次后,Container才发现无需显示水平滚动条,然后才调整子控件的宽度。
解决方法:
让滚动条的初始状态为隐藏状态就行了,即在CContainerUI::EnableScrollBar函数里新建滚动条的时候,加上SetVisible(false);完整代码如下:
void CContainerUI::EnableScrollBar(bool bEnableVertical, bool bEnableHorizontal) { if( bEnableVertical && !m_pVerticalScrollBar ) { m_pVerticalScrollBar = new CScrollBarUI; m_pVerticalScrollBar->SetOwner(this); m_pVerticalScrollBar->SetManager(m_pManager, NULL, false); m_pVerticalScrollBar->SetVisible(false); // 这里添加 if ( m_pManager ) { LPCTSTR pDefaultAttributes = m_pManager->GetDefaultAttributeList(_T("VScrollBar")); if( pDefaultAttributes ) { m_pVerticalScrollBar->ApplyAttributeList(pDefaultAttributes); } } } else if( !bEnableVertical && m_pVerticalScrollBar ) { delete m_pVerticalScrollBar; m_pVerticalScrollBar = NULL; } if( bEnableHorizontal && !m_pHorizontalScrollBar ) { m_pHorizontalScrollBar = new CScrollBarUI; m_pHorizontalScrollBar->SetHorizontal(true); m_pHorizontalScrollBar->SetOwner(this); m_pHorizontalScrollBar->SetManager(m_pManager, NULL, false); m_pHorizontalScrollBar->SetVisible(false); // 这里添加 if ( m_pManager ) { LPCTSTR pDefaultAttributes = m_pManager->GetDefaultAttributeList(_T("HScrollBar")); if( pDefaultAttributes ) { m_pHorizontalScrollBar->ApplyAttributeList(pDefaultAttributes); } } } else if( !bEnableHorizontal && m_pHorizontalScrollBar ) { delete m_pHorizontalScrollBar; m_pHorizontalScrollBar = NULL; } NeedUpdate(); }
0 0
- duilib进阶教程 -- Container控件的bug (14)
- duilib进阶教程 -- Container控件 (3)
- duilib进阶教程 -- TreeView控件的bug (9)
- duilib进阶教程 -- Label控件的bug (8)
- duilib进阶教程 -- 各种控件的响应 (10)
- duilib进阶教程 -- TreeView控件的不足 (7)
- duilib进阶教程 -- 改进List控件 (1)
- duilib进阶教程 -- 改进List控件 (16)
- duilib进阶教程 -- TreeView控件(6)
- duilib进阶教程 -- 改进List控件 (1)
- duilib进阶教程 -- 扩展duilib的消息 (11)
- duilib进阶教程 改进窗口的拖动
- duilib进阶教程 -- XML嵌套及自定义控件 (4)
- duilib进阶教程 -- 总结 (17)
- duilib进阶教程 -- 总结 (17)
- duilib进阶教程 -- 总结 (17)
- 修复duilib库UISlider控件的4个bug
- duilib relativepos属性导致控件错误的bug修复
- UVa 10042 - Smith Numbers
- gson使用在android使用例子
- duilib进阶教程 -- 改进List控件 (16)
- 网友汇总的IT笔试面试题
- duilib进阶教程 -- 设置资源路径 (15)
- duilib进阶教程 -- Container控件的bug (14)
- duilib进阶教程 -- 响应windows原生消息和自定义消息(13)
- duilib进阶教程 -- 改进窗口拖动 (12)
- duilib进阶教程 -- 扩展duilib的消息 (11)
- duilib进阶教程 -- 各种控件的响应 (10)
- iOS国际化时遇到的错误:read failed: the data couldn't be read because it isn't in the correct format.
- html&JavaScript&ajax部分
- duilib进阶教程 -- TreeView控件的bug (9)
- PHP面向对象:PHP中的多态