Шаг 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);
		}
}

Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 1.07.2000