virtual POSITION CDocument::GetFirstViewPosition() 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

virtual POSITION CDocument::GetFirstViewPosition()

Поиск

virtual POSITION CDocument::GetFirstViewPosition()

// возвращает позицию первого из присоединенных представлений

 

virtual CView* CDocument::GetNextView(POSITION & rPosition)

// возвращает указатель на представление с позицией rPosition

// из списка присоединенных представлений,

// переводит rPosition на следующую позицию (если нет, то на NULL)

 

Используемый здесь тип POSITION описан в MFC так:

 

struct __POSITION { int unused; };

typedef __POSITION* POSITION;

 

Наш выбор CEditView в качестве базового класса для представлений привел к тому, что мастер AppWizard переопределил в нашем классе «документ»его метод ввода-вывода:

 

 

void COptimizerDoc::Serialize(CArchive& ar)

{// CEditView contains an edit control which handles all serialization

((CEditView*)m_viewList.GetHead())->SerializeRaw(ar);}

 

Как видим, ввод-вывод в данном случае по сути взял на себя класс CEditView, что также нарушает основы архитектуры документ-представление. Его метод SerializeRaw «отправляет» содержащийся в окне-представлении текст в файл или из файла.

 

Допустим, Вам не нужно несколько представлений документа, но необходима поддержка каркаса приложений для работы с файлами. Тогда забудьте о функциях UpdateAllViews и OnUpdate, и придерживайтесь следующей простой схемы.

 

1. В заголовочном файле производного класса документа, сгенерированном AppWizard, объявите переменные-члены, в которых хранятся основные данные программы. Объявите их открытыми или сделайте производный класс "представление" дружественным классу документа.

 

2. В производном классе "представление" переопределите виртуальную функцию OnInitialUpdate. Каркас приложеий вызывает ее после инициализации или считывания с диска данных документа. Эта функция должна обновить представление, чтобы оно отражало текущее содержание документа.

 

3. Напишите требуемые обработчики оконных и командных сообщений и функцию OnDraw в производном классе "представление" так, чтобы они имели доступ к переменным-членам класса "документ", используя для этого функцию GetDocument.

 

В простейшем случае события будут развиваться в такой последовательности:

 

1. Запуск программы

2. Создание объекта "документ"

3. Создание объекта "представление"

4. Создание окна представления

5. Вызов OnNewDocument из класса "документ"

6. Вызов OnInitialUpdate из класса "представление", где происходит инициализация "представления", объявление недействительных областей и вызывается OnDraw

7. Пользователь редактирует данные и функции "представления" обновляют переменные-члены класса "документ"

8. Уничтожение объектов "представление" и "документ"

9. Завершение работы программы.

 

Класс CWinApp уже рассматривался нами, но при этом мы не касались его свойств, связанных с архитектурой «документ/представление». Для того чтобы разобраться с этим вопросом необходимо ввести сначала понятие шаблона документов.

 

 

Класс шаблона документов

 



Поделиться:


Последнее изменение этой страницы: 2024-06-27; просмотров: 52; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.21 (0.008 с.)