VC2003.net, WinXP
程序没有使用 文档/视图的框架, 直接只用了Frame, 我想在程序中再动态创建CHtmlView, CTreeView, CListView, CFramView, 在后面的操作中,要对这些动态创建的视图拆分和切换。请给个思路阿,谢谢

解决方案 »

  1.   

    建一个普通CWnd的子类,里面放个TabCtrl,可以控制其显示或不显示,往TabCtrl里添加其它的窗口,用TabCtrl来控制,显示那个窗口,当然应该把操作封装到Cwnd的子类里了,呵呵。建议找些现成的代码。
      

  2.   

    以下是一个切换视图的函数,希望对楼主有些帮助
    void CMainFrame::SwitchView(int nForm)
    {
       CView *pOldActiveView = GetActiveView();   //保存旧视图
        CView *pNewActiveView = (CView*)GetDlgItem(nForm);   //取得新视图
      
        if(pNewActiveView == NULL)
        {
            switch(nForm)
            {
            case IDD_ALLDEV_DIALOG :
                pNewActiveView =(CView*) AllDevView;
                break;
            case IDD_ONEDEV_DIALOG :
                pNewActiveView = (CView*)new COneDevView;
                break;
            }
            CCreateContext context;   //将文挡和视图相连
            context.m_pCurrentDoc=pOldActiveView->GetDocument();
           if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CAllDevView))
        pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD ,
    CFrameWnd::rectDefault, this, nForm, &context);
            pNewActiveView->OnInitialUpdate();
        }
        SetActiveView(pNewActiveView);        //改变活动的视图
        pNewActiveView->ShowWindow(SW_SHOW);  //显示新的视图
        pOldActiveView->ShowWindow(SW_HIDE);  //隐藏旧的视图    if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(CAllDevView))
              pOldActiveView->SetDlgCtrlID(IDD_ALLDEV_DIALOG);    else if(pOldActiveView->GetRuntimeClass() == RUNTIME_CLASS(COneDevView))
              pOldActiveView->SetDlgCtrlID(IDD_ONEDEV_DIALOG);    pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
       delete pOldActiveView;   //删除旧视图    RecalcLayout();          //调整框架窗口}