Шаг 176 - Просмотр связей и подчиненность элемента

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

176_1.gif (5120 b)

После этого мы можем с Вами добавить стили вида. Вот как в примере ниже. Мы с переменной dwStyle добавляем новые атрибуты управляющие видом дерева.

BOOL CLeftView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName,
	DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID,
	CCreateContext* pContext) 
{
	dwStyle=dwStyle | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS;
	return CWnd::Create(lpszClassName, lpszWindowName,
		dwStyle, rect, pParentWnd, nID, pContext);
}

Следующей нашей задачей будет переподчинение элемента верхнему элементу при условии, что они одного уровня. На панели инструментов я создал кнопку.

176_2.gif (975 b)

Ну давайте посмотрим последовательность действий для подчинения нижнего элемента верхнему. Итак, первое - это проверка на то, что элемент дерева выделен.

void CLeftView::OnGoRigth() 
{
HTREEITEM hi;
hi=GetTreeCtrl().GetSelectedItem();  
if (hi!=NULL)
	{ 
	  .......
	}
else AfxMessageBox("Not Selected Item");
}

Теперь нам надо получить указатель на элемент дерева того же уровня. Вот так это можно сделать. Функция GetPrevSiblingItem получает указатель на элемент того же уровня, но выше указанного элемента.

 HTREEITEM his;
  his=GetTreeCtrl().GetPrevSiblingItem(hi);
  if (his!=NULL)
  {
   ......
  }
  else AfxMessageBox("Not Move Item")

Ну вот и пришло время подчинить нижний элемент верхнему.

int notselect;
int select;
GetTreeCtrl().GetItemImage(hi,notselect,select); 
GetTreeCtrl().InsertItem(GetTreeCtrl().GetItemText(hi),notselect,select,his);
GetTreeCtrl().DeleteItem(hi); 

Вот так можно сделать. Смотрите. Первое, что мы делаем это получаем 2 характеристики выделенного элемента. Первые две это картинки когда активный или когда не активный. Командой InsertItem мы вставляем элемент как подчиненный для верхнего. Не зря же мы указали his в конце. Это указатель на элемент, в подчинение которому пойдет этот элемент. В конце перемещаемый элемент мы удаляем.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 1.05.2000