在xxdoc.cpp里做成以下函数:以取得象view 里面的GetDocument 函数的功能,
请问这样写会有什么潜在的缺陷么?
Cview *Cxxdoc::GetView(CRuntimeClass *pClass)
{
    Cview* pview;
    POSITION pos = GetFirstViewPosition();
    while(pos!=NULL)
    {
        pview = GetNextView(pos);
        if (!pview->IsKineOf(pClass));
        break;
     }
     if (!pview->IsKineOf(pClass))
     {
         AfxMessageBox("Can Not Locate The VIew!");
      }
}

解决方案 »

  1.   

    对不起,漏了两行码:
    Cview *Cxxdoc::GetView(CRuntimeClass *pClass)
    {
        Cview* pview;
        POSITION pos = GetFirstViewPosition();
        while(pos!=NULL)
        {
            pview = GetNextView(pos);
            if (!pview->IsKineOf(pClass));
            break;
         }
         if (!pview->IsKineOf(pClass))
         {
             AfxMessageBox("Can Not Locate The VIew!");
             return NULL;
          }
         return pview;
      
    }
      

  2.   

    if (!pview->IsKineOf(pClass))//这里如果pview == NULL会有问题
         {
             AfxMessageBox("Can Not Locate The VIew!");
             return NULL;
          }
    还有,我感到奇怪,你的目的是“以取得象view 里面的GetDocument 函数的功能”
    可是这个函数就在Document里,你干吗又去找呢?
      

  3.   

    要实现这个功能可以到msdn中去找,有篇文章好象是How to get your doucument/view from anywhere?有例程可以拷贝,可以直接用!
      

  4.   

    我的目的是
    “象view 里面的GetDocument 函数的功能”
    那样在Document里面去做一个GetView()
      

  5.   

    任何doc都有一个m_pViewList指针(未公开),直接访问就行啊!
      

  6.   

    请问如何才能取得m_pViewList指针?
      

  7.   

    在doc.cpp中这样就可以访问了CTestiew* pView = (CTestView*)m_viewList.GetHead();
      

  8.   

    在这里这些view指针是放在一个list里面的,一般的list有什么操作,也可以在这里用获得了view的指针,就可以对他作其他的操作了,没什么特殊的gethead函数你都看到了,应该可以想到还可以getnext了吧,这样一个循环,就可以遍历整个view列表了。当然了,你也许希望获得你需要的view指针,那么,你根据获得的view判断是否满足你的条件就是了,这个就不用我说了吧?