Шаг 53 - Что такое CTreeCtrl

Создание проекта

Будем дальше развивать наш проект. Нам надо поместить на него элемент дерево просмотра.

53_1.gif (9214 b)

Для этого элемента установим свойства. О них по шагам есть дальше, а пока кратко. В свойствах мы настроим, как будут отображаться элементы дерева.

53_2.gif (7862 b)

Создаем код

Объявить класс элемента управления.

class CTestDlg : public CDialog	// класс диалогового окна
{
public:
CEdit cEdit; //
CTreeCtrl m_Tree; // класс дерева
protected:
CString m_edit; // даные
};

Организовать обмен данными через DDX

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
.............
DDX_Control(pDX, IDC_EDIT3, cEdit); // с окном
DDX_Control(pDX, IDC_TREE1, m_Tree); // с деревом
}

Установка элементов в дерево при инициализации диалогового окна.

BOOL CTestDlg::OnInitDialog()
{
............
cSpin.SetPos(50); // позиция
HTREEITEM otdel=m_Tree.InsertItem("otdel"); // структура элемента дерево
HTREEITEM ayp=m_Tree.InsertItem("ayp",otdel); // структура элемента дерево
HTREEITEM work=m_Tree.InsertItem("working",otdel); // структура элемента дерево
m_Tree.InsertItem("Petrov",ayp); // добавить элемент
m_Tree.InsertItem("Ivanow",ayp); // добавить элемент
m_Tree.InsertItem("Katj",work); // добавить элемент
m_Tree.InsertItem("Olj",work); // добавить элемент
m_Tree.InsertItem("Nastj",work); // добавить элемент

return TRUE;
}

А вот так будет все это работать.

53_3.gif (6536 b)

Описание

Элемент CTreeCtrl предназначен для работы со структурами, имеющими древовидную структуру. Воющем это является основой всех классификаций. Посмотрите на структуру предприятия: всё предприятие - отделы - отряды - люди. Это дерево. Или Государство. Государство - области - районы - поселки - улицы - дома. Практически все данные можно представить в виде иерархий того или иного плана. Как всегда объявляем класс и устанавливаем связь через DDX - это мы уже делаем, не помню, какой раз. Для заполнения дерева нам необходимо использовать функцию InsertItem у этой функции много описаний и воспользуемся самым простым.

HTREEITEM InsertItem( LPTV_INSERTSTRUCT lpInsertStruct );
HTREEITEM InsertItem(UINT nMask, LPCTSTR lpszItem, int nImage, int nSelectedImage, UINT nState, UINT nStateMask, LPARAM lParam, HTREEITEM hParent, HTREEITEM hInsertAfter );
HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST );
HTREEITEM InsertItem( LPCTSTR lpszItem, int nImage, int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST);

Как видите в функции выделенной жирным шрифтом обязательным является только один параметр. Это строка. Второй параметр - это адрес ствола дерева. TVI_ROOT - это означает корень, то есть элемент самого верхнего уровня. Итак, при первом вызове функции я создал корень дерева с названием otdel. При выполнении функции возвращается идентификатор этого узла в виде переменной типа HTREEITEM. Мы её запоминаем, чтобы создать узлы меньшего уровня. Посмотрите ниже по коду. Теперь используем эту переменную otdel, для того чтобы вставить два ответвления. И при их вставке запоминают место в переменных, для того чтобы вставить еще узлы меньшего ранга. Запускайте. Вы увидите древовидный список, сможете открывать, закрывать ветви.

Давайте еще раз посмотрим как производилось добавление элементов.

HTREEITEM  otdel=m_Tree.InsertItem("otdel");

Добавили в корень дерева пункт otdel. Теперь у нас есть указатель на этот пункт. Мы им воспользуемся для создания подпунктов в пункте.

HTREEITEM  ayp=m_Tree.InsertItem("ayp",otdel);
HTREEITEM work=m_Tree.InsertItem("working",otdel);

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

m_Tree.InsertItem("Petrov",ayp);

Шпаргалка

Объявить класс

class CTestDlg : public CDialog	// класс диалогового окна
{
..........
CTreeCtrl m_Tree; // класс дерева
..........
};

Настроить DDX.

void CTestDlg::DoDataExchange(CDataExchange* pDX)
{
.............
DDX_Control(pDX, IDC_TREE1, m_Tree); // с деревом
}

Произвести начальную инициализацию.

.........
HTREEITEM work=m_Tree.InsertItem("working",otdel); // структура элемента дерево
m_Tree.InsertItem("Petrov",ayp); // добавить элемент
........

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 13.10.99 (обновлено 14.07.2001)