Перебор видов какого-то документа реализовать очень просто. Для этого в классе документа реализованны две функции: // Эта функция возвращает позицию первого вида в списке видов документа. 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; } } } |