How to Acquire a List of All CDocument ObjectsLast reviewed: October 10, 1997Article ID: Q106455 |
1.00 1.50 1.51 1.52 | 1.00 2.00 2.10 2.20 4.00
WINDOWS | WINDOWS NTkbprg kbfasttip kbhowto kbcode The information in this article applies to:
SUMMARYThe 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.
Sample Code 1 - MFC 3.x and prior
/* 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); } }}
Sample Code 2 - MFC 4.0
/* 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); } }}
MORE INFORMATIONThe Visual C++ version 4.0 Books Online document all of the following functions:
CDocTemplate::GetFirstDocPosition FunctionDeclaration: virtual POSITION GetFirstDocPosition() const; Remarks: Call this function to get the position of the first document in the list of open documents associated with the template. Return Value: A POSITION value that can be used for iteration with the GetNextDoc member function.
CDocTemplate::GetNextDoc FuncationDeclaration: virtual CDocument* GetNextDoc(POSITION& rPosition) const; rPosition: A reference to a POSITION value returned by a previous call to the GetNextDoc or GetFirstDocPosition member function. This value must not be NULL. Remarks: Call this function to iterate through all of the document template's open documents. The function returns the document identified by rPosition and then sets rPosition to the POSITION value of the next document in the list. If the retrieved document is the last in the list, then rPosition is set to NULL. Return Value: A pointer to the view identified by rPosition.
|
Additional reference words: kbinf 1.00 1.50 2.00 2.10 2.20 2.50 2.51
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |