Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ctreeCtrl 
:(
    Опции темы
tonchitos
Дата 17.3.2008, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 24.2.2007

Репутация: 1
Всего: 40



не могу найти функци - получить уровень выбранного потомка и позицию.


--------------------
– Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил.
PM MAIL   Вверх
Earnest
Дата 17.3.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Функции для определения уровня нет, но написать ее элементарно, коли надо.
Позиция в дереве - это что? Единственный ид-р элемента в дереве - HTREEITEM.


--------------------
...
PM   Вверх
tonchitos
Дата 17.3.2008, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 24.2.2007

Репутация: 1
Всего: 40



позиция - позиция среди чайлдов.


поле1
уровень1
позиция2
   поле1.1
   уровень2
   позиция1

   поле1.2
   уровень2
   позиция2


   поле1.3
   уровень2
   позиция3
поле2
уровень1
позиция2

мне, чтобы удалить чайлда, надо знать его уровень и позицию.

как написать не поскажете?


--------------------
– Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил.
PM MAIL   Вверх
Earnest
Дата 17.3.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(tonchitos @  17.3.2008,  15:57 Найти цитируемый пост)
позиция - позиция среди чайлдов.

C выражений мыслей у нас явная проблема. Ты имеешь в виду, линейный порядок элементов? Так кто же, кроме тебя знает, в каком они там у тебя порядке. А дерево не имеет линейного порядка, его обходить можно по-разному. Можно, конечно, считать, что порядок элементов в дереве == порядку, в котором ты их туда записывала, то это не всегда верно, зависит от флагов вставки, и лучше бы на это не полагаться.
Если в твоих данных элементы хранятся в массиве и имеют какой-то порядковый номер, то проще всего запоминать его при добавлении элементов, в LPARAM. Если позиция - это номер именно в списке дочерних элементов конкретного узла, тогда записывай и уровень и позицию: MAKELONG (level, pos) - надеюсь 2 байтов тебе хватит для индексации?  




--------------------
...
PM   Вверх
dizzy1984
Дата 18.3.2008, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 15.2.2007

Репутация: 10
Всего: 25



Не совсем понятно, о чем речь. Дерево - это вариант графа, а в графе есть только 2 вещи - вершина и наличие связи между вершинами. Так, кажется я понял о чем речь, уровень - это удаленность от корня. А вот с позицией проблемы - это понятие не имеет смысла, разве что только для определенного способа обхода вершин, либо если предположить, что позиция определяется временем вставки, т.е чем позднее вставили, тем больше "позиция".
Тогда я бы сделал обход таким образом

ГлубинаПозиция(Глубина, ИдентификаторТекущегоУзла, ИдентификаторИскомогоУзла)
  Позиция = 0  
  Для Всех Потомков Текущего Угла
       Если ИдентификаторТекущегоПотомка = ИдентификаторИскомогоУзла, то
            Вернуть {Глубина; Позиция}
       Иначе
            {Глубина1; Позиция1} = ГлубинаПозиция(Глубина + 1, ИдентификаторТекущегоПотомка, ИдентификаторИскомогоУзла)
             Если Корректно({Глубина1; Позиция1}), то
                  Вернуть {Глубина1; Позиция1}
       КонецИначе
       Позиция = Позиция + 1
   КонецДля
   Вернуть {НекорректнаяГлубина; НекорректнаяПозиция}


Или есть второй вариант - как говорит Earnest, при заполнении дерева вести учет глубины и позиции и ассоциировать с вершиной эти значения с помощью CTreeCtrl::SetItemData.
PM MAIL   Вверх
Earnest
Дата 18.3.2008, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(dizzy1984 @  18.3.2008,  11:20 Найти цитируемый пост)
Или есть второй вариант - как говорит Earnest, при заполнении дерева вести учет глубины и позиции и ассоциировать с вершиной эти значения с помощью CTreeCtrl::SetItemData. 

Ну, я имела ввиду заносить данные прямо при вставке элемента, заполняя lparam, но и так можно.


--------------------
...
PM   Вверх
tonchitos
Дата 18.3.2008, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 24.2.2007

Репутация: 1
Всего: 40



Господа, мне очень нужна ф-ия для отображения или не отображения плюсика.
мне нужно загружать всех чайлдов в дерево не сразу, а только при нажатии плюсика. Задание такое.

Хто нить ф-ю такую знает?
Плюс нажатие на плюсик тоже надо.

Добавлено через 5 минут и 28 секунд
инит диалог вызывается до дуМодал или после?

Добавлено через 6 минут и 6 секунд
    TreeDlg TrDlg(0, root);
    TrDlg.myFlag = false;  // вот это значение в инитедиалоге уже будет?
    TrDlg.DoModal();


--------------------
– Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил.
PM MAIL   Вверх
tonchitos
Дата 18.3.2008, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 24.2.2007

Репутация: 1
Всего: 40



Уровень мне нужен: тк добавив потомка в дерево мне надо добавить его в дерево -структуру данных. для этого знать надо уровень. По данным не проверишь, они в разных ветках совпадать могут.


--------------------
– Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил.
PM MAIL   Вверх
tonchitos
Дата 18.3.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 24.2.2007

Репутация: 1
Всего: 40




Добавлено @ 15:18
то есть как мне с ассоциировать узел в триконтроле с узлом в моем дереве.

Это сообщение отредактировал(а) tonchitos - 18.3.2008, 16:09


--------------------
– Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил.
PM MAIL   Вверх
tonchitos
Дата 18.3.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 24.2.2007

Репутация: 1
Всего: 40



как я понимаю в данном случае только по данным можно найти. ну уровень я определила. рекурсия, ну опять тлудно сообразить...




--------------------
– Люди забыли эту истину, – сказал Лис, – но ты не забывай: ты навсегда в ответе за всех, кого приручил.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0757 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.