zoukankan      html  css  js  c++  java
  • 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();
        }


     





  • 相关阅读:
    学习linux之用户-文件-权限操作
    Hadoop--Hadoop的机架感知
    redhat 6.3 64位安装中文输入法全过程记录
    hdu 4619 Warm up 2(并查集)
    openGL 初试 绘制三角形 和添加鼠标键盘事件
    MySQL 启动服务报错解决方案
    20亿与20亿表关联优化方法(超级大表与超级大表join优化方法)
    50行python代码实现个代理server(你懂的)
    nginx+tomcat反复请求
    慢慢过渡到个人博客
  • 原文地址:https://www.cnblogs.com/Alberl/p/3404393.html
Copyright © 2011-2022 走看看