Программирование на языке MFC

Мой второй блог в серии программирования

Отображение без проблем


Я начал писать программу и остановился, словно услышал вопрос, задаваемый читателем: «Как же так, если, к примеру, мне хочется отображать данные в виде дерева или, скажем, в виде текста, мне так и придется прорисовывать дерево или использовать TextOut()?» Что ж, вопрос вполне закономерный. Мне тоже очень не хотелось думать, что разработчики MFC остановились на полпути и не до­вели дело до конца. Помните, читатель, мое федположение о том, что класс CView является абстрактным и предоставляет только базовые возможности для объектов класса окна представления? Отправной точкой дальнейших изысканий послужило предположе­ние, что более специализированные классы окон представлений наследуются от CView. Заглянув в исходные коды MFC, я слегка обомлел. Оказывается, от CView наследуются классы CCtrlView, CScrollView. В свою очередь от CCtrlView унаследованы классы CListView, CTreeView, CEditView, CRichEditView. От CScrollView унас­ледованы CFormView, CPreviewView. От CFormView унаследованы классы CDaoRecordView, CRecordView, CHtmlView, COIeDBRecord-View. Графически это можно представить так:

Пример

(CVievT)

-[CCtrlView ]

( CListView ]

[CTreeView]

-(CEditVievT)

CRichEditView]

-(CScrollView ~)

[CFormView ]

-(CDAORecordView)

(CRecordView ]

-(CHtmlView ]

[CQIeDBRecordView ]

—[ CPreviewView]

Даже судя по названиям, уже можно сделать выводы о предна­значении этих классов. Наверное, класс окна отображения в моей программе мне нужно было наследовать не от CView, а от более специализированного класса, скажем, CEditView. Что ж, попробу­ем так и сделать. Но теперь нам нужно отследить,каким образом работают объекты этого класса. Давайте, читатель, подумаем вме­сте вами. На каком этапе начинает работать объект класса, унас­ледованного от CView? Наверное, при создание объекта окна пред­ставления. Давайте попробуем проследить, что произойдет в мо­мент создания окна представления.