duilib进阶教程 -- Container控件的bug (14)
在《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();
}
duilib进阶教程 -- Container控件的bug (14)的更多相关文章
- duilib进阶教程 -- Container控件 (3)
前面两个教程的目的是教大家与MFC结合,那么从这篇起,将不再使用MFC,而使用纯win32项目,本文的所有知识已经在<duilib入门教程>里面讲过了,因此基础知识不再赘述. 代码下载:h ...
- duilib进阶教程 -- Label控件的bug (8)
上个教程说到了TreeView的文字不能垂直居中的问题,而我们用LabelUI其实是可以垂直居中的,为什么不说是TreeView的bug,而说是Label控件的bug呢?因为影响TreeView垂直居 ...
- duilib进阶教程 -- TreeView控件的bug (9)
一.不自动调整子控件的宽度(TreeView宽度小于260时) 相信亲们用同样的代码,显示效果肯定和Alberl不一样吧~O(∩_∩)O~ 嘿嘿,仔细对比下,看看你们的列表头背景图片是下面这样的么? ...
- duilib进阶教程 -- TreeView控件(6)
代码下载:http://download.csdn.net/detail/qq316293804/6483905 上一个教程中,界面已经和迅雷一模一样啦,大小和位置一个像素都不差哟,亏得Alberl调 ...
- duilib进阶教程 -- TreeView控件的不足 (7)
上一个教程中,虽然播放列表的框架和迅雷一样了,但是字体大小.文字居中还没有解决.如果是刚学duilib,搞定这个可不容易,因为在有了入门教程的指导后,很容易就想到去看[属性列表.XML],但是当你试了 ...
- duilib进阶教程 -- 各种控件的响应 (10)
到上一个教程为止,界面显示的代码就都介绍完啦,现在开始介绍控件的响应,其实在<2013 duilib入门简明教程 -- 事件处理和消息响应 (17)>里已经列出了duilib自己定义的所有 ...
- 百度地图Api进阶教程-默认控件和自定义控件2.html
<!DOCTYPE html> <html> <head> <meta name="viewport" content="ini ...
- duilib进阶教程 -- 总结 (17)
整个教程的代码下载:http://download.csdn.net/detail/qq316293804/6502207 (由于duilib进阶教程主要介绍界面,所以这个教程只给出界面相关的代码,完 ...
- 2013 duilib入门简明教程 -- 复杂控件介绍 (13)
首先将本节要介绍的控件全部拖到界面上,并调整好位置,如图: 然后将Name属性改成其他名字, 不能是[控件名+UI+数字]这种,因为这是DuiDesigner ...
随机推荐
- 学习笔记008之Task
栈 为后进先出 如何实现一个弹出窗体.
- Python-dict与set
dict(字典):用空间换取时间,占据空间大,但查询速度快,键值对(key:value),key唯一 d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} 由于一个k ...
- Extjs学习笔记--Ext.tree.Panel
Ext.create('Ext.tree.Panel', { title: 'Simple Tree', width: 200, height: 150, store: store, rootVisi ...
- WiFi破解
BT5破解WPA2-PSK无线密码实践 笔者住处附近有无线信号,觉得可以试着破解一下,于是有了如下实践. 软硬件环境:Vmware Workstation 9,BT5 r3,reaver1.4 ...
- python-->基础-->002-->input & raw_input
一.input与raw_input的区别 1.raw_input()说明 a = raw_input("input content:")print a,type(a) 输出结果: ...
- 小甲鱼python视频弟十二讲(关于字符串的方法及注释下)
1,ljust(width[, fillchar]) width -- 指定字符串长度. fillchar -- 填充字符,默认为空格. 用法:返回一个原字符串左对齐,并使用空格填充至指定长度的新字 ...
- 在Mac OS X中配置Apache
启动Apache 有两种方法: 打开“系统设置偏好(System Preferences)” -> “共享(Sharing)” -> “Web共享(Web Sharing)” 打开“终端( ...
- 洛谷P2014 选课 (树形dp)
10月1日更新.题目:在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分 ...
- Adding AirDrop File Sharing Feature to Your iOS Apps
http://www.appcoda.com/ios7-airdrop-programming-tutorial/ Adding AirDrop File Sharing Feature to You ...
- jQuery学习总结(二)
简单选择器: 在使用jQuery 选择器时,我们首先必须使用“$()”函数来包装我们的CSS 规则. 而CSS 规则作为参数传递到jQuery 对象内部后,再返回包含页面中对应元素的jQuery 对象 ...