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 руб./мес


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




 23 - Взаимодействие документ-вид / MFC шаг за шагом / Visual C++

Шаг 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); // обновить виды
}

Загрузить проект | | |
Автор Каев Артем.
[AD]