http://tikitak.narod.ru ---- Главная страница сайта
Шаг 26 - Пункт меню новый документ как в AppWizard
Эти строки создаются в момент, когда по всей России гремят взрывы.
Когда начинается новая война на Кавказе.
Когда Западные страны пытаются обвенить Россию во всех грехах.
Но у нас есть оружие. Это наши знания и клалификация.
И относиться к этому нужно как к оружию - ежедневно чистить и пристреливать.
Это мои слова.
Бывший сержат разведроты 11 Воздушно десантной бригады.
Создание проекта
Работаем с текущим проектом. Только в нашем пункте меню File нужно создать пункт меню New с идентификатром ID_FILE_NEW. Хотя идентификатор может быть любой но мы договорились сделать как в волшебнике.
Создаем код
Добавляем таблицу откликов в класс приложения
class CStep2App : public CWinApp
{
public:
.............
private:
DECLARE_MESSAGE_MAP()
};
И её реализация
BEGIN_MESSAGE_MAP(CStep2App, CWinApp)
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
END_MESSAGE_MAP()
Добавляем функцию новый документ в класс документа
class CMyDoc : public CDocument
{
..........
public:
..........
virtual BOOL OnNewDocument();
.......
};
И реализация
BOOL CMyDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
csDate="Hello View - Doc";
return TRUE;
}
Изменяем конструктор.
CMyDoc::CMyDoc()
{
// AfxMessageBox("Contrustions Doc");
}
Описание
Описание я начну с механизма реализации функции новый документ. В MFC заложены механизмы автоматизации пункта меню New.
Конструктор документа вызывается только один раз при создании приложения. Больше он не вызывается. Это вы можете проверить раскомментировав AfxMessageBox и запустив приложение. Запускайте, получите сообщение от конструктора. Выбирайте пунк меню New и ничего. Так вот, для создания нового документа используется виртуальная функция OnNewDocument.
Именно поэтому я убрал из консруктора определение строки csDate. Все данные должны определяться в OnNewDocument.
Ну теперь смотрим сверху. Первое добавили таблицу отклика в класс приложения. В этом классе CWinApp есть механизм вызова NewDocument. Вот мы его вызываем обращаясь к функции CWinApp::OnFileNew.
Далее мы создаем функцию OnNewDocument для класса CDocument и её реализацию. Вызываем функцию отца для нормальной работы. Устанавливаем данные и говорим, новый документ создан удачно return TRUE;.
Запускайте. А теперь ходовые испытания. Первое. Вызываем меню About для изменения данных, если вы нечего не меняли то должен появиться мой EMail. А теперь вызовем New и в видах их меняются надписи. Они вернутся к начальному состоянию.
Вот так, работает. Это классно. Классно потому что понятно. И если вы будете, а вы будете пользоваться волшебником обязательно, то я надеюсь поймете в чем дело.
Шпаргалка
Создать пункт меню с иеднтификатором
ID_FILE_NEW
Создать реакцию на него в классе приложения
BEGIN_MESSAGE_MAP(CStep2App, CWinApp)
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
END_MESSAGE_MAP()
Создать функцию новый документ для класса документа и раелизацию
BOOL CMyDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// Ваша инициализируммые данные
return TRUE;
}
Предыдущий Шаг | Следующий Шаг | Оглавление By Artem.
Используются технологии uCoz
|