Мы будем учить наш проект сохранять данные. Поэтому оставим старый. Но в ресурсах надо добавить идентификаторы и пункт меню Save.
Итак, идем в ресурсы и в меню создаем пункт меню Save, а идентификатор ставим ID_FILE_SAVE.
Теперь нам нужно в ресурсах создать еще одну строку. С идентификатором AFX_IDS_ALLFILTER и содержанием *.my. Вообще то надо больше. Мы делаем самый минимум.
В классе документа.
class CMyDoc : public CDocument // класс документа
{
........
virtual BOOL OnNewDocument(); // будет вызываться при выборе меню New
virtual void Serialize(CArchive& ar); // сохранение востановление файлов
DECLARE_DYNCREATE(CMyDoc)
........
};
И реализация.
void CMyDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring()) // если сохранение
{
ar << csDate; // записываем
}
else
{
// для чтения
}
}
Вот так она будет работать.
Итак, функция Serialize. Если кратко, то это реализация сохранения на диск и похожа она на работу с потоками. Присваивание пункту меню идентификатора ID_FILE_SAVE приведет к тому, что данные будут сохраняться на диск. Создайте пункт меню, и он сразу будет доступен даже без описания в таблице откликов. В MFC есть механизм обработки этого идентификатора без нашего вмешательства. При вызове пункта меню с таким идентификатором MFC автоматически вызывает функцию Serialize из класса документа зарегистрированного в шаблоне.
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME, // идентификатор меню
RUNTIME_CLASS(CMyDoc), // документ ----| Вот у этого класса вызовется Serialize !!!
RUNTIME_CLASS(CMainFrame), // рамка окна ---| Документ вид однако.
RUNTIME_CLASS(CMyView)); // просмотр ----|
А в этой функции мы автоматически сохраняет или читаем данные.
Только для работы этого пункта меню нужны строковые ресурсы. Именно с помощью них окну сохранения становиться известно какой фильтр, какое имя файла. Если вы вспомните "Шаг 15 - Стандартный диалог открытия файлов", то знаете, сколько параметров нужно передать классу CFileDialog. В данном случае эти параметры передаются через строковые ресурсы.
Компилируйте. Запускайте. Сохраните. Потом откройте в любом тестовом редакторе и вы увидите текст, который был на экране. Вот почти так работает волшебник, то есть создает такой код.
Сохранение происходит с использованием функции Serialize класса документа
Пункт сохранения должен иметь идентификатор ID_FILE_SAVE
Необходимо объявить как минимум один строковый ресурс AFX_IDS_ALLFILTER