我在框架中分割了两个视图,一个是CView另一个是FormView,请问我要在主框架中得到FormView的指针怎么做?

解决方案 »

  1.   

    CSplitterWnd::GetPane 
    CWnd* GetPane( int row, int col );
      

  2.   

    例如
    CxxxView *pView = (CxxxView *)m_wndSplitter.GetPane(0,1);
      

  3.   

    试过了,debug Assertion Failed! 取不到指针。这是在OnCreateClient事件下:
    m_CreatedOK = m_HSplitter.CreateView(1,0,RUNTIME_CLASS(CMyFormView),CSize(0,0),pContext);这个在主框架的OnSize事件下:
    CMyFormView *pFormView = (CMyFormView*)m_HSplitter.GetPane(1,0);
      

  4.   

    ONSIZE消息会响应很多次的,所以你在取指针之前先要确定m_HSplitter是否有效.
    用IsWindow.你可以跟踪一下,看ONSIZE进去了几次.
      

  5.   

    用CSplitterWnd::GetPane(...)没错, 它可以返回一个视图的CWnd指针,转换一下就达到目的了
      

  6.   

    还是不行,到这句就出问题了
    pWnd = m_HSplitter.GetPane(1,0);跟踪后pWnd值是“???”还是得不到指针
      

  7.   

    你等他窗口生成完以后再去获得视图指针.
    CView *pView=m_HSplitter.GetPane(1,0);
    if(pView==NULL||!::IsWindow(pView->GetSafeHwnd())
    {
        CXXXView *pXXXView = (CXXXView*)pView;
    }
    试试看.GetPane函数是没有问题的.你注意一下传的参数.
      

  8.   

    是我试过了,关键是到
    pWnd = m_HSplitter.GetPane(1,0);
    这句就debug Assertion Failed!了
      

  9.   

    你对m_HSplitter做了判断没.如果还不行的话.把你的工程发给我看看.把DEBUG里的东西删了打包发[email protected]
      

  10.   

    if (m_HSplitter.GetSafeHwnd)
    {
        CView *pView=m_HSplitter.GetPane(1,0);
    }
      

  11.   

    OnSize里要做判断:
    if(m_HSplitter.GetSafeHwnd() && GetDlgItem(m_HSplitter.IdFromRowCol(1, 0)))
    {
    CMyFormView *pFormView = (CMyFormView*)m_HSplitter.GetPane(1,0);
    }