问题是这样的,建一个SDI工程,里面添加一个基于CFormView的类Form。
在View类里面添加一个Form*类型的指针p。重载View的OnCreate方法,在OnCreate中创建一个Form对象,并把地址赋给p。重载View的OnSize方法,通过p将Form的大小设成和View一样大。
在Form上摆放一些控件,比如一个按钮。
当鼠标点击Form上的非控件区域的时候,指针p就会清空,导致无法访问Form。
访问方法是 CMainFrame *pMain=(CMainFrame*)AfxGetApp()->m_pMainWnd;   
CWEQView *pView=(CWEQView*)pMain->GetActiveView();
pView->p->......这时p的值就会变成0但如果此时改变窗口大小,通过View的OnSize来看,p的值却又会变回之前Form的地址。不知道有谁知道是怎么回事。
还有如何能使得p的值不会发生变化,让我能访问到Form

解决方案 »

  1.   

    CWEQView    *pView=(CWEQView*)pMain->GetActiveView();
    当你的view不是active的时候这个函数返回的就不是你那个view了
    我认为可以把p指针定义为Static的。然后直接这样访问:
    CWEQView::P->...
      

  2.   

    CWEQView* pView = (CWEQView*)GetParent();
      

  3.   

    你的ActiveView不是那个装Form的view了?
    你直接将Form作为View不可以吗?
      

  4.   

    ok, 谢谢大家搞明白是怎么回事了因为点了鼠标,所以View类就不是ActiveView了,所以取到的对象就不对了,强制转换之后对应的自然就NULL了