15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Раскрытие одной ветви полностью -- 1 метод

Проблему раскрытия одной ветви польностью можно решить следующим путем:

       
 // ExpandBranch - Expands a branch completely
// hti          - Handle of the tree item to expand
void CTreeCtrlX::ExpandBranch( HTREEITEM hti )
{
        if( ItemHasChildren( hti ) ){
                Expand( hti, TVE_EXPAND );
                hti = GetChildItem( hti );
                do{
                        ExpandBranch( hti );
                }while( (hti = GetNextSiblingItem( hti )) != NULL );
        }
        EnsureVisible( GetSelectedItem() );
}



        

Принцип действия не сложен. Он заключается в рекурсивном вызове развертывающего метода. Беда только в том, что при достаточно большом дереве это может привести к нехватке памяти или ошибкам сопутствующим рекурсии.

 

 

Источник: ProtoSphere