pingkai1217 2016-03-11 08:58 采纳率: 41.7%
浏览 2768

MFC框架下 单文档视图中多视图切换问题

在MainFrm.cpp 里对主视图进行了切分

 BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
    // TODO: Add your specialized code here and/or call the base class

    //

    CRect rc;

    // 获取框架窗口客户区的CRect对象   
    GetClientRect(&rc);

    // 创建静态分割窗口,三行一列   
    if (!m_wndSplitter.CreateStatic(this, 3, 1))
        return FALSE;

    // 创建上面窗格中的视图   
    if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CTopview), CSize(rc.bottom, rc.right / 9), pContext))
        return FALSE;

    // 创建中间窗格中的视图   
    if (!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CCentview), CSize(rc.Width(), rc.right / 7 * 5.9), pContext))
        return FALSE;
    // 创建下面窗格中的视图 
    if (!m_wndSplitter.CreateView(2, 0, RUNTIME_CLASS(Cfootview), CSize(rc.bottom, rc.right / 7), pContext))
        return FALSE;
    centview = (CCentview*)m_wndSplitter.GetPane(1, 0);

    m_wndSplitter.HideSplitter();

    m_isSplitter = TRUE;
    return TRUE;
}

主要是切割成三行视图,中间也就是第二行视图是根据第一行视图里按钮的事件进行切换的 比如现在有 treeview, listview这2个视图;
切换时使用这种方式

 void CMainFrame::SwitchToView(int nViewType)
{
    CView* pView = (CView*)m_wndSplitter.GetPane(1,0);
    CRect rcRight, rcFrame;
    pView->GetClientRect(&rcRight);
    GetClientRect(&rcFrame);

    switch (nViewType)
    {
     case CENTVIEW:     //treeview
      {
         if (!pView->IsKindOf(RUNTIME_CLASS(Ctreeview)))
        {
            //删除旧的视图
            m_wndSplitter.DeleteView(1,0);
            //创建新的视图
            m_wndSplitter.CreateView(1,0, RUNTIME_CLASS(Ctreeview),
                CSize(rcRight.Width(), rcRight.Height()), NULL);
            //调整分布
            m_wndSplitter.RecalcLayout();
            treeview = (Ctreeview*)m_wndSplitter.GetPane(1,0);

            }
         break;
       }


        case CLOG:      //CLOG
        {
            if (!pView->IsKindOf(RUNTIME_CLASS(Clistview)))
            {
                //删除旧的视图
                m_wndSplitter.DeleteView(1,0);
                //创建新的视图
                m_wndSplitter.CreateView(1,0, RUNTIME_CLASS(Clistview),
                CSize(rcRight.Width(),rcRight.Height()),NULL);
                //调整分布
                m_wndSplitter.RecalcLayout();
                listview = (Clistview*)m_wndSplitter.GetPane(1,0);

            }
            break;
        }

    default:
        break;
    }

}

视图切换没有问题,现在主界面使用treeview视图 里面是有数据的,当我切换到listview视图如果给这个视图添加数据比如加个函数在OnInitialUpdate里调用 就会报错
图片说明

请大神看看是什么原因 应该怎么修改

编译器是 VS2013

  • 写回答

1条回答 默认 最新

  • pingkai1217 2016-03-12 00:56
    关注

    求解答。。。。。。。。。。。。。。。。。

    评论

报告相同问题?

悬赏问题

  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试
  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python