POSITION pos = theApp.GetFirstDocTemplatePosition();
        while (NULL != pos)
        {
            CDocTemplate *pDocT = theApp.GetNextDocTemplate(pos);            if (NULL != pDocT)
            {
                POSITION posDoc = pDocT->GetFirstDocPosition();
                while (NULL != posDoc)
                {
                    CDocument* pDoc = pDocT->GetNextDoc(posDoc);
                    if ( NULL != pDoc )
                    {
                        POSITION posView = pDoc->GetFirstViewPosition();
                        while (NULL != posView)
                        {
                            CPQView* pqView = (CPQView*)pDoc->GetNextView(posView);
                            // 进行操作
                        }
                    }
                }
            }
        }
这段代码为什么不能轮询所有打开的视图了?在MainFrame进行的操作。
只找到第一个视图,然后所有的POSITION都被赋值为0x0了?

解决方案 »

  1.   

    这个问题很奇怪,但是用另外的解决方案解决了,不过我依然想知道这其中的原委。
           CMDIChildWnd *pMDIActive = NULL;
            CMDIChildWnd *pOldMDIActive = NULL;
            pOldMDIActive = MDIGetActive();
            while (pOldMDIActive != pMDIActive)
            {
                if (NULL == pMDIActive)
                {
                    pMDIActive = pOldMDIActive;
                }
                CDocument *pDoc = pMDIActive->GetActiveDocument();
                if (NULL != pDoc)
                {
                    POSITION pos = pDoc->GetFirstViewPosition();
                    while(NULL != pos)
                    {
                        CView *pView = (CView*)pDoc->GetNextView(pos);
                        // TODO
                    }
                }
                MDINext();
                pMDIActive = MDIGetActive();
            }
    谁能给出解答,依然给分。以上为其他的替代方案。