C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 172 - Понимание связи VIEW и CTRL / MFC шаг за шагом / Visual C++

Шаг 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.


| |
Автор Каев Артем.
[AD]