http://tikitak.narod.ru ---- Главная страница сайта
Шаг 27 - Пункт меню сохранить документ как в AppWizard
Создание проекта
Мы будем учить наш проект сохранять данные. Поэтому оставим старый. Но в ресурсах надо добавть идентификаторы и Пункт меню Save
Итак идем в меню и создаем пункт меню Save, а идентифкатор ставим ID_FILE_SAVE.
Создаем строку в строковых ресурсах IDS_TITLE с обязательным номером 61441. Содержание - Save Project.
Создаем строку AFX_IDC_ALLFILTER и содержанием *.my
Создаем строку AFX_IDS_UNTITLED и содержанием MySave.my
Создаем код
В классе документа
class CMyDoc : public CDocument
{
.......
virtual void Serialize(CArchive& ar);
...........
};
И реализация
void CMyDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
ar << csDate;
}
else
{
// для чтения
}
}
Описание
Итак первое функция Serialize. Для понятия происходящего Вам надо пройти шаги - Наследование от CObject по шагам. А если кратко, то это реализация сохранения на диск и похожа она на работу с потоками.
Присваивание пункту меню идентификатора ID_FILE_SAVE приведет к тому , что данные будут сохранять на диск. Создайте пункт меню и он сразу будет доступен даже без описания в таблице откликов. В MFC есть механизм обработки этого идентификатора без нашего вмешательства. При вызове пункта меню с таким идентификатором MFC автоматически вызывает функцию Serialize из класса документа зарегистрированного в шаблоне.
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMyDoc),
//Вот у этого класса вызовется Serialize
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CMyView));
AddDocTemplate(pDocTemplate);
Но если на этом остановиться то при работе вызовется ошибка. Для корректной работы необходим строковый идентификатор IDS_TITLE именно с номером 61441. Надпись будет использована в диалоге сохранения файла. И еще два идентификатора. Фильтр просмотра и имя сохраняемого файла.
Компилируйте. Запускате. Сохраните. Потом откройте в любом тестовом редакторе и вы увидите текст который был на экране.
Вот почти так работает волшебник.
Шпаргалка
Сохранение происходит с использованием функции Serialize класса документа
Пункт сохранения доолжен иметь идентификатор ID_FILE_SAVE
Необходимо обьявить еще 3 строковых ресурса IDS_TITLE, AFX_IDC_ALLFILTER, AFX_IDS_UNTITLED
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|