www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
  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
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz