zoukankan      html  css  js  c++  java
  • 动态切换视图窗口(转)

    文章标题:动态切换视图窗口
    原 作 者:程红秀
    原 出 处:vczx.com
    发 布 者:chx20
    发布类型:原创
    发布日期:2005-12-12
    今日/总浏览:1/4972
    下载代码:

    在CMainFrame中定义变量:

    CSplitterWnd m_wndSplitter;

    BOOL CMainFrame::ReplaceView(int row, int col, CRuntimeClass *pViewClass, SIZE
        size
    )
    {
       
    CCreateContext context;
       
    BOOL bSetActive;

       
    if ((this->m_wndSplitter.GetPane(row, col)->IsKindOf(pViewClass)) == TRUE)
           
    return FALSE;

       
    //获取文档对象的指针,以便在创建新视图的过程中能够使用它
       
    CDocument *pDoc = ((CView*)m_wndSplitter.GetPane(row, col))->GetDocument();

       
    CView *pActiveView = this->GetActiveView();
       
    if (pActiveView == NULL || pActiveView == m_wndSplitter.GetPane(row, col))
           
    bSetActive = TRUE;
       
    else
           
    bSetActive = FALSE;

       
    pDoc->m_bAutoDelete = FALSE; //设置标志,这样当视图销毁时不会删除文档
       
    ((CView*)m_wndSplitter.GetPane(row, col))->DestroyWindow(); //删除存在的视图
       
    pDoc->m_bAutoDelete = TRUE; //设回默认的标志


        //创建新视图
       
    context.m_pNewViewClass = pViewClass;
       
    context.m_pCurrentDoc = pDoc;
       
    context.m_pNewDocTemplate = NULL;
       
    context.m_pLastView = NULL;
       
    context.m_pCurrentFrame = NULL;
       
    m_wndSplitter.CreateView(row, col, pViewClass, size, &context);


       
    CView *pNewView = (CView*)m_wndSplitter.GetPane(row, col);

       
    if (bSetActive == TRUE)
           
    this->SetActiveView(pNewView);

       
    m_wndSplitter.RecalcLayout(); //重新计算位置
        // m_wndSplitter.GetPane(row,col)->SendMessage(WM_PAINT);

       
    return TRUE;
    }

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext *pContext)
    {
       
    if (!m_wndSplitter.CreateStatic(this, 1, 2))
           
    return FALSE;

       
    if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CTView), CSize(200, 100),
           
    pContext))
           
    return FALSE;

       
    if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CFView), CSize(100, 100),
           
    pContext))
           
    return FALSE;

       
    m_bFormView = true;
       
    return TRUE;
    }


    void CMainFrame::OnFormView()
    {
       
    ReplaceView(0, 1, RUNTIME_CLASS(CFView), CSize(100, 100));
       
    m_bFormView = true;
    }

    void CMainFrame::OnListView()
    {
       
    ReplaceView(0, 1, RUNTIME_CLASS(CVVView), CSize(100, 100));
       
    m_bFormView = false;

    }

    void CMainFrame::OnUpdateFormView(CCmdUI *pCmdUI)
    {
       
    pCmdUI->SetCheck(m_bFormView);
    }

    void CMainFrame::OnUpdateListView(CCmdUI *pCmdUI)
    {
       
    pCmdUI->SetCheck(!m_bFormView);
    }

  • 相关阅读:
    【小模块】公告滚动并暂停
    w3school的PHP教程提炼(一)PHP基础
    Nicholas C. Zakas:介紹CSS Lint(检测工具)
    【小模块】回到顶部的页面跟随按钮(仿淘宝)
    【小模块】内容循环滚动(仿新浪微博未登录首页滚动微博显示)
    前端管窥:图片Sprite管理
    《锋利的jQuery》要点归纳(六)插件的使用和写法
    CSS reset 一份很全的样式表
    《锋利的jQuery》要点归纳(五)jQuery与ajax的应用(上)
    《锋利的jQuery》要点归纳(五)jQuery与ajax的应用(下)
  • 原文地址:https://www.cnblogs.com/seacode/p/1757468.html
Copyright © 2011-2022 走看看