我现在遇到一个问题,我想在一个cformview类中调用另一个cformview类的变量和函数,一开始我用了指针,编译了说是错误,还有人建议我用句柄,请问高手,有何高见呢,能附上程序好吗,谢了。

解决方案 »

  1.   

    什么错误呢?是不是没有 #include "XXXDlg.h"
      

  2.   

    只能用静态成员函数或成员变量。
    但你说的“一个cformview类中调用另一个cformview类的变量和函数”,意思不明白,两个类名字相同,怎么会是两个不同的类呢,你的意思是不是在某类的一个实例中访问另外一个实例的成员或函数,这样的话,用静态可能达不到你的要求,因为所有实例共享所有的静态量。
      

  3.   

    想法没错,只要得到了另一个类的指针,就可以得到你想要的数据,就像Doc/View结构里View要用到Doc的数据一样。问题的关键在于如何正确地得到其它类的指针,指针操作很简单,就是一个->操作符。
    你把错误贴出来大家看一下才好判断错误在哪里啊
      

  4.   

    视图类之间互相获得指针的方法:就是用文档类作中转,先用1的方法得到文档类的指针,再用2的方法,以文档类的视图定位函数取得另一个视图类。同样,可以实现成一个函数:
        (假设要从CTestAView中取得指向其它视图类的指针)
        CView* CTestAView::GetView(CRuntimeClass* pClass)
        {    CTestDoc* pDoc=(CTestDoc*)GetDocument();
            CView* pView;
            POSITION pos=pDoc->GetFirstViewPosition();
            while(pos!=NULL)
        {
              pView=pDoc->GetNextView(pos);
                if(pView->IsKindOf(pClass))
                    break;
        }
            if(!pView->IsKindOf(pClass))
                return  NULL;
            return pView;}
        这个函数和2中的GetView()相比,一是多了第一句以取得文档类指针,二是在GetFirstViewPosition()和GetNextView()前加上了文档类指针,以表示它们是文档类成员函数。
        有了此函数;当要从CTestAView中取得CTestBView的指针时,只需如下:
        CTestBView* pTestbView=(CTestView*)GetView(RUNTIME_CLASS(CTestBView));
    请问缺少什么呢?