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();
        }


     





  • 相关阅读:
    HDU4366 Successor 线段树+预处理
    POJ2823 Sliding Window 单调队列
    HDU寻找最大值 递推求连续区间
    UVA846 Steps 二分查找
    HDU3415 Max Sum of MaxKsubsequence 单调队列
    HDU时间挑战 树状数组
    UVA10168 Summation of Four Primes 哥德巴赫猜想
    UESTC我要长高 DP优化
    HDUChess 递推
    HDU4362 Dragon Ball DP+优化
  • 原文地址:https://www.cnblogs.com/Alberl/p/3404393.html
Copyright © 2011-2022 走看看