C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 200 - О классе документа CDocument / MFC шаг за шагом / Visual C++

Шаг 200 - О классе документа CDocument

Здесь на основе прошлого шага я попробую ;-) рассказать о некорых функциях класса CDocument, которые могут Вам пригодиться совсем для разных целей. Вот в этот код из прошлого шага я буду добавлять использование разных функций.

void CMy22Doc::OnViewInfomdi() 
{
.............
		  CDocument* cdoc=cd->GetNextDoc(DocPos); 
		  if (cdoc!=NULL)
		  {
			  // сюда !!!!!!!!!!!
			  AfxMessageBox(cdoc->GetTitle()); 
		  }
.............
}

Первая функция GetPathName() возврашает полный путь к документу на диске. Только если вы запустите приложение и посмотрите, то увидите пустую строку. Ее нет пока документ не сохранен на диске. Зачем использовать ??? Например, делать сложное хранение резервных копий при сохранении, что очень не плохо при наших электрических сетях, типа *.bk1, *.bk2 и так далее.

// Описание
const CString& GetPathName( ) const
// вот можно посмотреть
  if (cdoc!=NULL)
	  {
		  AfxMessageBox(cdoc->GetPathName()); 
	  }

Еще есть функция GetTitle(), которая возвращает имя документа. Это имя обычно совпадает с именем файла и находится в верхнем левом углу окна документа.

// Описание
const CString& GetTitle( ) const;
// вот можно посмотреть
  if (cdoc!=NULL)
	  {
		  AfxMessageBox(cdoc->GetTitle()); 
	  }

Для определении были ли в докумен внесены изменения с последнего сохранения используется функция IsModified.

// Описание
BOOL IsModified( );
// вот можно посмотреть
  if (cdoc!=NULL)
	  {
		  if (cdoc->IsModified()) AfxMessageBox("Modified"); 
	  }

Если вы произведете какие-то действия над приложением, например, удалите файл с диска, то класс документа не догадается о том, что документ не сохранен. Для этого можно воспользоваться функцией SetModifiedFlag и силовым методом сказать, что требуется напоминание о сохранении даже если ничего в классе документа не поменялось.

// Описание
void SetModifiedFlag( BOOL bModified = TRUE );
// вот можно посмотреть
  if (cdoc!=NULL)
	  {
		  cdoc->SetModifiedFlag(); 
		  if (cdoc->IsModified()) AfxMessageBox("Modified"); 
	  }

Продолжая идею связанную со связями, то с каждым классом документа связаны виды один или несколько. Исходя из этого предыдущую схему можно расширить так

CWinApp ->	CDocTemplate 
		........
		CDocTemplate  -> CDocument
				 .........
				 CDocument  -> CView 
				 .........

Опять тоже самое и иделогия такая же, смотрите, используются функции GetFirstViewPosition и GetNextView.

if (cdoc!=NULL)
{
		POSITION  ViewPos;
		ViewPos=GetFirstViewPosition();
		while (ViewPos!=NULL)
		{
			CView* cv=GetNextView(ViewPos);
		}
}

| |
Автор Каев Артем.
[AD]