我从CView派生了一个对象CTestView,它的构造和析构函数是protected类型。我在网上搜索过,好像有两种创建方法:方法一  
CRuntimeClass* pViewClass=RUNTIME_CLASS(CView);  
CView* pView=(CView*)pViewClass->CreateObject();  方法二  
CView* pView = new CView; 因为构造函数是protected类型,因此第二种方法不适合于我;第一种方法感觉应该可以,但是我在OnSize中想调整窗口对象尺寸时,我用pView->MoveWindow函数,发生了ASSERT(::IsWindow(m_hWnd))错误。也就是说创建的窗口指针是无效的。请问该如何创建一个CView对象?

解决方案 »

  1.   

    构造函数是protected类型,怎么就适合?protected类型,子类也是可以继承的。CView MyView;
    MyView.create() 
      

  2.   

    在创建的时候会调用一次OnSize。。试下加个判断可以不。。
      

  3.   

    CMyView* pView = new CMyView;
    if(pView)
    {
    CRect rc;
    GetClientRect(&rc);
    if(!pView->Create(NULL, NULL, WS_CHILD|WS_VISIBLE, rc, this, NULL, NULL))
    {
    AfxMessageBox(_T("Create View failed."));
    return TRUE;
    }
    pView->OnInitialUpdate();
    }
    修改CMyView的构造函数为public即可,CMyView派生自CView类