Шаг 23 - Взаимодействие документ-вид

Модель документ-вид - одна из наиболее существенных
особенностей библиотеки MFC - пожалуй, наиболее трудна
для понимания.
Френк Крокет техническая поддержка Microsoft Visual C++.

Создание проекта

Продолжаем развитие проекта. Нам надо только добавить к меню раздел Help и поле About. Для реакции на событие. Имя идентификатора для пункта меню About - ID_ABOUT.

23_1.gif (5271 b)

Создаем код

Добавляем функции к описанию класса документа.

class CMyDoc : public CDocument	 	// класс документа
{
protected:
CMyDoc();
CString csDate; // здесь будем хранить
DECLARE_DYNCREATE(CMyDoc)
public:
CString GetDate(); // получить данные
void SetString(CString s); // установить строку
void OnAbout(); // реакция на выбор меню
private:
DECLARE_MESSAGE_MAP(); // таблица откликов

};

Нужно создать таблицу откликов на сообщения в классе документа.

BEGIN_MESSAGE_MAP(CMyDoc, CDocument)
ON_COMMAND(ID_ABOUT,OnAbout) // при выборе меню
END_MESSAGE_MAP()

Реализация функций.

void CMyDoc::OnAbout()
{
SetString("Первые шаги (с)"); // установить строку
UpdateAllViews(NULL); // обновить виды
}
void CMyDoc::SetString(CString s)
{
csDate=s; // установить данные внутри документа
}

Вот так будет реагировать программа на выбор пункта меню.

23_2.gif (7280 b)

Описание

Мы добавили функцию для изменения строки в классе документа SetString. И она изменяется после выбора пункта меню OnAbout. В OnAbout мы устанавливаем новую строку и вызываем UpdateAllViews эта функция заставляет виды перерисовать себя. А перерисовываются она на основе данных в документе. Им приходится вызывать свою функцию OnDraw, запрашивать документ и прорисовывать текст. В этом примере сама суть идеи документ - вид. Вы изменяете данные в документе, а виды их отражают.

Шпаргалка

Меняйте данные в классе документа.

class CMyDoc : public CDocument	 	// класс документа
{
...........
void SetString(CString s); // установить строку
...........
};

После изменения обновите виды.

void CMyDoc::OnAbout()
{
...........
UpdateAllViews(NULL); // обновить виды
}

Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 15.09.99 (обновлено 2.07.2001)