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 руб./мес


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




 199 - Шаблоны, документы и работа с ними / MFC шаг за шагом / Visual C++

Шаг 199 - Шаблоны, документы и работа с ними

Суть этого шага сводится к проблеме как нам получить все шаблоны существующие в документе и документы связанные с этими шаблонами. Общая структура в MFC представляет из себя дерево, которое из двух уровней. В CWinApp мы можем получать шаблоны, а из шаблонов документы.

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

Ну давайте попробуем ? Создайте приложение MDI, просто выберите тип и нажмите Finish и все. Потом создайте пункт в меню, к которому мы с Вами привяжем демонстрационный код. Реакция на событие пусть будет в классе документа.

/////////////////////
// CMy22Doc commands

void CMy22Doc::OnViewInfomdi() 
{

}

Итак, нам нужно получить указатель на все шаблоны, которые есть у нас в документе. Такая возможность есть в классе WinApp, значит нам нужно сначала на него получить указатель.

void CMy22Doc::OnViewInfomdi() 
{
CWinApp* MyApp=AfxGetApp(); 
}

Теперь можно получить указатель и на шаблон документов. Это можно сделать функцией GetFirstDocTemplatePosition. Если шаблона нет, то вернется NULL - это есть начальная позиция для перебора.

void CMy22Doc::OnViewInfomdi() 
{
// Step1
CWinApp* MyApp=AfxGetApp(); 
// Step2
POSITION pos;
pos=MyApp->GetFirstDocTemplatePosition();
if (pos!=NULL)
{
	AfxMessageBox("Yes Template");	
}
}

Вот теперь мы спокойно можем идти по всем шаблонам используя функцию GetNextDocTemplate. Эта функция и обносит указатель, который при ситуации, что шаблона больше нет станет NULL.

void CMy22Doc::OnViewInfomdi() 
{
// Step1
CWinApp* MyApp=AfxGetApp(); 
// Step2
POSITION pos;
pos=MyApp->GetFirstDocTemplatePosition();
// Step 3
while (pos!=NULL)
{
	CDocTemplate* cd=MyApp->GetNextDocTemplate(pos); 	
}
}

Теперь мы можем получать документы из шаблона и из свойства. Общая логика опять повторяется.

void CMy22Doc::OnViewInfomdi() 
{
// Step1
CWinApp* MyApp=AfxGetApp(); 
// Step2
POSITION pos;
pos=MyApp->GetFirstDocTemplatePosition();
// Step 3
while (pos!=NULL)
{
	CDocTemplate* cd=MyApp->GetNextDocTemplate(pos);
	// Step 4
	if (cd!=NULL)
	{
	  POSITION DocPos;	
	  DocPos=cd->GetFirstDocPosition(); 
	  while (DocPos!=NULL)
	  {
		  CDocument* cdoc=cd->GetNextDoc(DocPos); 
		  if (cdoc!=NULL)
		  {
			  AfxMessageBox(cdoc->GetTitle()); 
		  }
	  }
	}	
}
}

Вот так можно получить список, например, всех возможно открытых документов из шаблонов. И вообще проводить групповые действия над всеми открытыми документами. Например, печатать все :-). Или закрыть или сохранить :-). Хорошо это.


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