Список видов в документе

Перебор видов какого-то документа реализовать очень просто. Для этого в классе документа реализованны две функции:
// Эта функция возвращает позицию первого вида в списке видов документа.
POSITION CDocument::GetFirstViewPosition();
// Эта функция возвращает вид и увеличивает счетчик на еденицу.
CView* CDocument::GetNextView(POSITION& rPosition);

Вот так можно получить все виды данного документа:
void ViewList(CDocument* pDoc)
{
    
POSITION pos = pDoc->GetFirstViewPosition();
    
while(pos)
    {
        
CView* pView = pDoc->GetNextView(pos);
        
// Здесь вы можете делать с каждым видом то, что вам нужно.
    
}
}
Очень часто нужно добраться до какого-то определенного вида в документе. Например если фрэйм вашего документа разделен сплиттером на два вертикальных вида. Пусть вы используете для левого вида класс CLeftView, а для правого вида класс CMyView, тогда вот как можно получить какой-нибудь определенный вид:
void FindView(CDocument* pDoc)
{
    
POSITION pos = pDoc->GetFirstViewPosition();
    
while(pos)
    {
        
CView* pView = pDoc->GetNextView(pos);
        
if(pView->IsKindOf(RUNTIME_CLASS(CLeftView)))
        {
            
CLeftView* pLeftView = (CLeftView*) pView;
            
// Добрались до левого вида.

            
continue;
        }
        
if(pView->IsKindOf(RUNTIME_CLASS(CMyView)))
        {
            
CMyView* pMyView = (CMyView*) pView;
            
// Добрались до правого вида.

            
continue;
        }
    }
}
 
« Предыдущая статья   Следующая статья »