以前我做了一个以CView为基类的单文档多视图,现在改为CScrollView,但令人郁闷的是在视图切换的时候会出错,一直没找到原因,请高手指点。

解决方案 »

  1.   

    断点调试的时候所有代码都正常,但是运行的时候就是Debug Assertion Failed
      

  2.   

    重载了这个函数了没有:
    void CXXXXView::OnInitialUpdate()
    {
    CScrollView::OnInitialUpdate(); CSize sizeTotal;
    // TODO: calculate the total size of this view
    sizeTotal.cx =100;
    sizeTotal.cy = 100;
    SetScrollSizes(MM_TEXT, sizeTotal);
    }
      

  3.   

    这是主要的代码,断点的时候所有语句都不出错,小弟刚涉足VC不久,实在找不到办法了,希望各位给提个醒。
    BOOL CModelApp::InitInstance()
    {
    ................. /////////////////////////////////////////////////////////////////////
    //创建一个新的视图
    CView* m_pActiveView=((CFrameWnd*)m_pMainWnd)->GetActiveView();
    m_pMainView=m_pActiveView;
    m_pBBTTView=new BBTT();
    m_pZFHJView=new ZFHJ();
    //文档和视图关联
    CDocument* m_pDoc=((CFrameWnd*)m_pMainWnd)->GetActiveDocument();
    CCreateContext context;
    context.m_pCurrentDoc=m_pDoc;
    //创建视图
    UINT m_IDFORANOTHERVIEW1=AFX_IDW_PANE_FIRST + 1;
    CRect rect1;
    m_pBBTTView->Create(NULL,NULL,WS_CHILD | WS_BORDER,rect1,m_pMainWnd,
    m_IDFORANOTHERVIEW1,&context); UINT m_IDFORANOTHERVIEW2=AFX_IDW_PANE_FIRST + 2;
    CRect rect2;
    m_pZFHJView->Create(NULL,NULL,WS_CHILD | WS_BORDER,rect2,m_pMainWnd,
    m_IDFORANOTHERVIEW2,&context); CurrentViewID=::GetWindowLong(m_pMainView->m_hWnd, GWL_ID);
    return TRUE;
    }void CModelApp::OnZfhj() 
    {
    // TODO: Add your command handler code here
    ::SetWindowLong(m_pZFHJView->m_hWnd,GWL_ID,CurrentViewID);
        CurrentViewID=::GetWindowLong(m_pZFHJView->m_hWnd,GWL_ID); m_pMainView->ShowWindow(SW_HIDE);
    m_pBBTTView->ShowWindow(SW_HIDE);
    m_pZFHJView->ShowWindow(SW_SHOW); ((CFrameWnd*)m_pMainWnd)->SetActiveView(m_pZFHJView);
    ((CFrameWnd*)m_pMainWnd)->RecalcLayout();
        m_pZFHJView->Invalidate();
    }..................void ZFHJ::OnInitialUpdate()
    {
    CScrollView::OnInitialUpdate(); CSize sizeTotal;
    // TODO: calculate the total size of this view
    sizeTotal.cx = sizeTotal.cy = 100;
    SetScrollSizes(MM_TEXT, sizeTotal);
    }
      

  4.   

    在视图类的构造函数中加入语句          CSize sizeTotal;
    // TODO: 计算此视图的合计大小
    sizeTotal.cx = sizeTotal.cy = 100 ;
    SetScrollSizes(MM_TEXT, sizeTotal);
    问题圆满解决。我的程序已经没事了。
      

  5.   

    CDataStructureView::CDataStructureView()
    {
    // TODO: 在此处添加构造代码
    m_Tool = 0;
    m_OldPoint = CPoint(0,0); CSize sizeTotal;
    // TODO: 计算此视图的合计大小
    sizeTotal.cx = sizeTotal.cy = 30000 ;
    SetScrollSizes(MM_TEXT, sizeTotal);
    }说明:CDataStructureView继承于CScrollView