Шаг 28 - Пункт меню открыть документ как в AppWizard

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

Продолжаем развитие нашего проекта. В ресурсах в меню необходимо создать пункт меню Open в меню File. И присвоить ему идентификатор ID_FILE_OPEN.

28_1.gif (4480 b)

Создаем код

В таблице реакций на события создаем реакцию на пункт меню.

BEGIN_MESSAGE_MAP(CStep2App, CWinApp)
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) // пункт меню New
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) // пункт меню Open
END_MESSAGE_MAP()

И добавим чтение данных.

void CMyDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring()) // если сохранение
{
ar << csDate; // записываем
}
else
{
ar >> csDate; // для чтения
UpdateAllViews(NULL); // обновить виды

}
}

Вот так будет все это работать.

28_2.gif (11152 b)

Описание

Учтите на всякий случай, что это учебный пример для демонстрации механизмов MFC. Как видите это всё. Первый идентификатор необходим для заголовка окна открытия файла. Вызываем процедуру открытия файла и MFC всё делает автоматом.

В процедуру Serialize добавили код чтения. Она вызывется из CWinApp::OnFileOpen. Итак, запускайте. Вызовете About, чтобы появилась надпись Первые шаги и сохраните документ. Потом выберете пункт меню New для обновления экрана. На экране будет другая запись. А Вот теперь откройте и опять появиться Первые шаги. Всё работает как часы.

Шпаргалка

Создай пункт меню и реакцию.

BEGIN_MESSAGE_MAP(CStep2App, CWinApp)
........
ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) // пункт меню Open
........
END_MESSAGE_MAP()

Создай процедуру чтения.

void CMyDoc::Serialize(CArchive& ar)
{
.......
else
{
ar >> csDate; // для чтения
UpdateAllViews(NULL); // обновить виды
}
}

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