就像vc一样,在左边的树行控件双击,右边就会产生一个视图。
我试过用CWinApp::OnFileNew();
但是不行,OnFileNew()是protected的
试过用pDoc->OnNewDocument();
也是出现错误
具体怎么实现,高手给点提示啊!
谢谢了!

解决方案 »

  1.   

    这个需要自己写一个函数void CRightPaneFrame::SwitchToView(UINT nView),树行控件双击对view进行付值,
      

  2.   

    先把视图创建好,在点击tree的时候只是切换视图//=============================================================================
    // name:     SwitchToView
    // function: switch view in main view
    //=============================================================================
    void CMainFrame::SwitchToView(eView curView)
    {
    CView* pOldActiveView = (CView*)GetActiveView(); ASSERT( pOldActiveView != NULL ); if( pOldActiveView->IsKindOf(RUNTIME_CLASS(CExpSettingView)) )
    pOldActiveView = (CView*)pOldActiveView->GetParent()->GetParent();
    else if( pOldActiveView->IsKindOf(RUNTIME_CLASS(CArenaView)) )
    pOldActiveView = (CView*)pOldActiveView->GetParent();    CView* pNewActiveView = (CView*) GetDlgItem(curView);

        if (pNewActiveView == NULL) {
            switch (curView) {
            case EXPDESIGN:
                pNewActiveView = (CView*) new CExpDesignView;
                break;
            case EXPARENADEF:
                pNewActiveView = (CView*) new CExpArenaDefView;
                break;
            }
            CCreateContext context;
            context.m_pCurrentDoc = pOldActiveView->GetDocument();        pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD|WS_VISIBLE,
                CFrameWnd::rectDefault, this, curView, &context);//
            pNewActiveView->OnInitialUpdate();
        } SetActiveView(pNewActiveView);    pOldActiveView->ShowWindow(SW_HIDE);
        pNewActiveView->ShowWindow(SW_SHOW); eView oldView;
    if( pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CExpSettingView) ||
    pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CExpDesignView))
    oldView = EXPDESIGN;
    else if( pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CArenaView) ||
         pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CExpArenaDefView) )
    oldView = EXPARENADEF;
    pOldActiveView->SetDlgCtrlID(oldView);             pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
        RecalcLayout(); m_eView = curView;
    }
      

  3.   

    CMDIChildWnd *pActiveChild=MDIGetActive();
    CDocument *pDocument;
    if(pActiveChild==NULL  || 
    (pDocument=pActiveChild->GetActiveDocument())==NULL)
    {
    TRACE("Warning: No active document for new View opened.\n");
    AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
    return;
    } // Otherwise we have a new frame
    CDocTemplate *pTemplate=((CxxxApp*)AfxGetApp())->m_pxxxTemplate;
    ASSERT_VALID(pTemplate);
    CFrameWnd *pFrame=
    pTemplate->CreateNewFrame(pDocument,pActiveChild);
    if(pFrame==NULL)
    {
    TRACE("Warning: failed to create new frame.\n");
    AfxMessageBox(AFX_IDP_COMMAND_FAILURE);
    return;
    } pTemplate->InitialUpdateFrame(pFrame,pDocument);