Модель документ-вид - одна из наиболее существенных
особенностей библиотеки MFC - пожалуй, наиболее трудна
для понимания.
Френк Крокет техническая поддержка Microsoft Visual C++.
Продолжаем развитие проекта. Нам надо только добавить к меню раздел Help и поле About. Для реакции на событие. Имя идентификатора для пункта меню About - ID_ABOUT.
Добавляем функции к описанию класса документа.
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; // установить данные внутри документа
}
Вот так будет реагировать программа на выбор пункта меню.
Мы добавили функцию для изменения строки в классе документа SetString. И она изменяется после выбора пункта меню OnAbout. В OnAbout мы устанавливаем новую строку и вызываем UpdateAllViews эта функция заставляет виды перерисовать себя. А перерисовываются она на основе данных в документе. Им приходится вызывать свою функцию OnDraw, запрашивать документ и прорисовывать текст. В этом примере сама суть идеи документ - вид. Вы изменяете данные в документе, а виды их отражают.
Меняйте данные в классе документа.
class CMyDoc : public CDocument // класс документа
{
...........
void SetString(CString s); // установить строку
...........
};
После изменения обновите виды.
void CMyDoc::OnAbout()
{
...........
UpdateAllViews(NULL); // обновить виды
}