Итак, продолжаем разговор о стиле Exploler и дереве в левом окне. Мы сейчас создадим код, который добавляет к дереву картинки. Все они будут на одном уровне, то есть мы будем создавать корни. Итак, нам нужно наше приложение, которое мы начали делать в "Шаг 167 - Стиль окна Exploler и панели инструментов".
Для того, чтобы в дереве можно было использовать картинки необходимо подготовить класс списка изображений. Для этого объявляем переменную класса списка изображений.
class CLeftView : public CTreeView { ... CImageList cImageList; ... };
Создадим и настроим в конструкторе список изображений.
CLeftView::CLeftView() { cImageList.Create(16,16,FALSE,3,0); InsertImageListIcon(); } void CLeftView::InsertImageListIcon() { HICON hIcon; hIcon=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON_DIR)); cImageList.Add(hIcon); hIcon=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON_DOC)); cImageList.Add(hIcon); hIcon=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON_DIR_OPEN)); cImageList.Add(hIcon); hIcon=::LoadIcon(AfxGetResourceHandle(),MAKEINTRESOURCE(IDI_ICON_DOC_OPEN)); cImageList.Add(hIcon); }
Обратите внимание на то, что я создал массив икон 16х16, так как большие иконы мне показались не очень красиво. Для этого я создал 4 иконы 16х16. Не зря был написан прошлый шаг.
Но вот внимание !!! Теперь для дальнейшего использования необходимо связать список изображений с классом дерева. Вот так.
void CLeftView::OnInitialUpdate() { ....... GetTreeCtrl().SetImageList(&cImageList,TVSIL_NORMAL); }
Вызываем соотвествующую функцию, передаем указатель на класс и опцию. Только функция эта не класса вида а класса CTRL соответствующего элементу управления дерево.
Теперь все готово к добавлению элемента к дереву. Вот код.
//////////////////////////////////////////////////// // CLeftView message handlers void CLeftView::OnAddDir() { GetTreeCtrl().InsertItem("Dir",0,2); }
Как видите опять функция класса CTRL позволяет просто вставить пункт. Обратите внимание на цифры. Эти цифры указывают какое изображение будет выводиться в случае, если пункт активный или неактивный.
Итак в глобальном плане. Готовим список изображений, связываем его с деревом, вставляем пункты указывая номера изображений активных и неактивных элементов.