..::VφcenßsobnΘ Üablony dokument∙::..

Nejd°φve jedno omezenφ. Lze je pou₧φt jen u MDI aplikacφ s podporou architektury dokument/pohled.

Jde v podstat∞ o to, ₧e si v aplikaci nadefinujete n∞kolik r∙zn²ch kombinacφ dokumentu, pohledu, d∞tskΘho rßmcovΘho okna a zdroj∙. PotΘ p°i ka₧dΘm vytvo°enφ novΘho dokumentu se vßs program pomocφ dialogu zeptß, kterou kombinaci chcete pou₧φt. Samoz°ejm∞ to platφ i p°i otevφrßnφ dokument∙, ale tam je to d∞lßno pomocφ typu soubor∙. Ulo₧it dokument m∙₧ete pouze do souboru s p°φponou odpovφdajφcφ kombinaci.

Prakticky se to ud∞lß tak, ₧e si nadefinujete dv∞ kombinace zdroj∙, jak je vid∞t na nßsledujφcφm obrßzku:

PotΘ p°idßte dalÜφ t°φdy pohledu, dokumentu a d∞tskΘho rßmcovΘho okna. Nic vßm ale nebrßnφ abyste pou₧ili u₧ existujφcφ, jen p°i jejich programovßnφ musφte zohlednit rozdφly mezi r∙zn²mi typy dokument∙. Proto se mi zdß lepÜφ (a hlavn∞ p°ehledn∞jÜφ) pou₧φt ·pln∞ novΘ t°φdy.
Dßle musφte tuto novou kombinaci p°idat do aplikace. To se d∞lß ve funkci CWinApp::InitInstance. AppWizard vßm sem ji₧ p°idal p∙vodnφ kombinaci, vy jen p°idßte dalÜφ, jak je vid∞t na nßsledujφcφm obrßzku:

PotΘ ji₧ to celΘ funguje. Kdy₧ vytvß°φte nov² dokument zobrazφ se vßm takov²to dialog:

a pomocφ n∞j si u₧ivatel zvolφ, kter² typ dokumentu chce vytvo°it. Nßzvy v dialogu odpovφdajφ °et∞zci ve zdrojφch.

P°i otevφrßnφ dokument∙ si takΘ m∙₧ete zvolit, kter² typ dokumentu chcete otev°φt, jak vidφte na nßsledujφcφm obrßzku:

Pokud vßm nevyhovuje standartnφ dialog p°i vytvß°enφ novΘho typu souboru, zapßtrejte co se d∞je p°i vytvß°enφ novΘho dokumentu a upravte si chovßnφ aplikace (tj. upravit funkce CWinApp::OnFileNew(), CDocManager::OnFileNew() a jejich vzßjemnou interakci), nebo pou₧ijte nßsledujφcφ postup:

Odchy¥te si zprßvu ID_FILE_NEW (tj. polo₧ka soubor nov²) a ud∞lejte si vlastnφ dialog, nebo si ud∞lejte novou polo₧ku menu pro ka₧d² typ dokumentu. (Ve t°φd∞ aplikace.)

Potom podle vybranΘho typu dokumentu volejte pomocnou funkci (musφte si ji sami napsat) OpenNewDocument, jφ₧ jako parametr p°edßte °et∞zec odpovφdajφcφ pod°et∞zci typu dokumentu z odpovφdajφcφ Üablony dokumentu. Nap°φklad takto:

void CTstApp::OnNewTst( )

{

OpenNewDocument("Tst");

}

 

void CTstApp::OnNewTs1( )

{

OpenNewDocument("Ts1");

}

 

BOOL CTstApp::OpenNewDocument(const CString& strTarget)

{

CString strDocName;

CDocTemplate* pSelectedTemplate;

POSITION pos = GetFirstDocTemplatePosition( );

vhile (pos!=NULL)

{

pSelectedTemplate = (CDocTemplate*) GetNextDocTemplate(pos);

ASSERT(pSelectedTemplate!=NULL);

ASSERT(pSelectedTemplate->IsKindOf(RUNTIME_CLASS(CDocTemplate)));

pSelectedTemplate->GetDocString(strDocName, CDocTemplate::docName);

if (strDocName == strTarget)

{

pSelectedTemplate->OpenDocumentFile(NULL);

return TRUE;

}

}

return FALSE;

}