Шаг 172 - Понимание связи VIEW и CTRL

В MFC реализовано несколько классов видов (View) на основе стандартных элементов управления. Пример таких классов CTreeView и CRichEditView. Они сами и работа с ними несколько отличается. Идея здесь в том, что в самом классе вида никаких практически функций не рализовано. То есть класс вида это просто оболочка. Например, в классе CTreeView вообще нет доступных функций. Вот его описание.

CTreeView 	конструктор
GetTreeCtrl 	указатель на элемент управления, который связан с видом.
.............

Вот и всё. Давайте посмотрим как обстоят дела с CRiсhEditView, здесь намного лучше функций больше, но например нет функции Copy, так что примерно тоже самое. Так вот такие классы организованы так.

..........
 CWnd
  |____	CView
	   |___	CCtrlView
		     |__ C.....View

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

CRichEditView  - CRichEditCtrl& GetRichEditCtrl( ) const;
CTreeView      - CTreeCtrl& GetTreeCtrl( ) const;
.............

Видите в каждом подобном классе вида есть возможность доступа к классу CTRL, который и реализует специфические функции элемента. А у классов CTRL своя иерархия.

 ....
 CWnd
 |_____ C.....Ctrl

Давайте посмотрим на примере CTreeView как добавить список изображений к данному классу. Вот смотрите код

void CLeftView::OnInitialUpdate()
{
	CTreeView::OnInitialUpdate();


	// TODO: You may populate your TreeView with items by directly accessing
	//  its tree control through a call to GetTreeCtrl().
	GetTreeCtrl().SetImageList(&cImageList,TVSIL_NORMAL);
}

Как видите мне пришлось использовать GetTreeCtrl(), чтобы добраться до функции связывания списка изображений с элементом дерево. Так же если мне захочется добавить элемент в дерево мне придется обратиться к GetTreeCtrl().

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


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