我建了个用CView派生的视图类MFC工程,程序就要写完快了,但是现在想从CScrollView派生视图类,我不可能再新建一个用CScrollView派生视图类的工程,再把源代码拷过去
请问,怎样手工把由CView派生的视图类改为用CScrollView派生

解决方案 »

  1.   

    把这个类里的CView都替换成CScrollView
      

  2.   

    这样的问题其实你调试一下就都明白了,调试,出问题,选retry
    会看到:
    if (m_nMapMode == MM_NONE)
    {
    TRACE0("Error: must call SetScrollSizes() or SetScaleToFitSize()");
    TRACE0("\tbefore painting scroll view.\n");
    ASSERT(FALSE);
    return;
    }
    知道为什么错就好解决了,在view的OnInitialUpdate里加:
    CSize sizeTotal;
    sizeTotal.cx = sizeTotal.cy = 100;
    SetScrollSizes(MM_TEXT, sizeTotal);
    就可以了
      

  3.   

    在视图内容改变的地方,最好是OnInitUpdate和OnUpdate(),都要改变CScrollView的尺寸、范围,就是SetScrollSizes()。
      

  4.   

    全部替换后,增加一个函数。
    在.h中
    virtual void OnInitialUpdate(); // called first time after construct
    virtual void OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint);
    .cpp中
    CScrollView::OnInitialUpdate();
    CSize sizeTotal;

    sizeTotal.cx =100
    sizeTotal.cy =200
    SetScrollSizes(MM_TEXT, sizeTotal);
    void CaaaView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint) 
    {
    // TODO: Add your specialized code here and/or call the base class
    // TODO: Add your specialized code here and/or call the base class
    CScrollView::OnUpdate(pSender,lHint,pHint);
    CSize sizeTotal;

    sizeTotal.cx =100
    sizeTotal.cy =200
    SetScrollSizes(MM_TEXT, sizeTotal);
    }