How to Acquire a List of All CDocument ObjectsID: Q106455
|
The code samples below demonstrate how to retrieve a list of pointers to
all open CDocument (and CDocument-derived objects) created by a
CWinApp-derived object. For MFC versions 3.x and below, Sample Code 1 shows
the use of CWinApp::m_templateList, CDocTemplate::GetFirstDocPosition(),
and CDocTemplate::GetNextDoc(). For MFC version 4.0, Sample Code 2 provides
a similar implementation, but uses CWinApp::GetFirstDocTemplatePosition()
and CWinApp::GetNextDocTemplate() to obtain the valid CDocTemplate
pointers.
For both code samples, CMyApp is derived from CWinApp. Moreover, once a
valid CDocTemplate pointer is obtained, CDocTemplate::GetFirstDocPosition()
and CDocTemplate::GetNextDoc() are used in both samples to iterate through
the list of open documents for each document template. For MFC versions 3.x
and earlier, an application object's list of document template pointers is
contained in CWinApp::m_templateList, a CPtrList object. Sample Code 1
makes use of this fact. For MFC version 4.0, CWinApp uses a CDocManager to
maintain its list of document templates and provides the
GetFirstDocTemplatePosition() and GetNextDocTemplate() member functions to
traverse the list. Sample Code 2 exhibits this.
/* Compile options needed: none
*/
void CMyApp::GetDocumentList(CObList * pDocList)
{
ASSERT(pDocList->IsEmpty());
POSITION pos = m_templateList.GetHeadPosition();
while (pos)
{
CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetNext(pos);
POSITION pos2 = pTemplate->GetFirstDocPosition();
while (pos2)
{
CDocument * pDocument;
if ((pDocument=pTemplate->GetNextDoc(pos2)) != NULL)
pDocList->AddHead(pDocument);
}
}
}
/* Compile options needed: none
*/
void CMyApp::GetDocumentList(CObList * pDocList)
{
ASSERT(pDocList->IsEmpty());
POSITION pos = GetFirstDocTemplatePosition();
while (pos)
{
CDocTemplate* pTemplate = (CDocTemplate*)GetNextDocTemplate(pos);
POSITION pos2 = pTemplate->GetFirstDocPosition();
while (pos2)
{
CDocument * pDocument;
if ((pDocument=pTemplate->GetNextDoc(pos2)) != NULL)
pDocList->AddHead(pDocument);
}
}
}
The Visual C++ version 4.0 Books Online document all of the following
functions:
Additional query words: kbinf 1.00 1.50 2.00 2.10 2.20 2.50 2.51 2.52 3.00 4.00
Keywords : kbcode kbDocView kbMFC kbVC
Version : 1.00 1.50 1.51 1.52 | 1.00 2.00
Platform : NT WINDOWS
Issue type :
Last Reviewed: August 2, 1999