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


 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM