duilib進階教程 -- Container控件的bug (14)

  在《duilib進階教程 -- TreeView控件的bug (9)》裏,Alberl發現了兩個bug,並解決了其中一個,如今教程已經接近尾聲啦,因此Alberl就解決了另一個bug。html

  Bug現象:函數

  第一次啓動軟件時,因爲播放列表並無文件,因此沒有顯示垂直滾動條,當咱們拖入文件後,就顯示了垂直滾動條,這個時候會自動調整子控件的寬度,因而一切顯示正常。ui

  可是當咱們第二次啓動軟件時,因爲軟件會加載文件到播放列表,因此一開始就顯示了垂直滾動條,但這個時候並無自動調整子控件的寬度,因此子控件顯示到了列表的外面,如圖:this

  

  其實不只TreeView有問題,並且List也有問題,用以下代碼spa

  

  啓動時,效果如圖:code

  

  最小化一次後,效果如圖:htm

  

  緣由:blog

  其實這是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();
    }


 



相關文章
相關標籤/搜索