问题描述
- 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(10); CRect rcRight rcFrame; pView->GetClientRect(&rcRight); GetClientRect(&rcFrame); switch (nViewType) { case CENTVIEW: //treeview { if (!pView->IsKindOf(RUNTIME_CLASS(Ctreeview))) { //删除旧的视图 m_wndSplitter.DeleteView(10); //创建新的视图 m_wndSplitter.CreateView(10 RUNTIME_CLASS(Ctreeview) CSize(rcRight.Width() rcRight.Height()) NULL); //调整分布 m_wndSplitter.RecalcLayout(); treeview = (Ctreeview*)m_wndSplitter.GetPane(10); } break; } case CLOG: //CLOG { if (!pView->IsKindOf(RUNTIME_CLASS(Clistview))) { //删除旧的视图 m_wndSplitter.DeleteView(10); //创建新的视图 m_wndSplitter.CreateView(10 RUNTIME_CLASS(Clistview) CSize(rcRight.Width()rcRight.Height())NULL); //调整分布 m_wndSplitter.RecalcLayout(); listview = (Clistview*)m_wndSplitter.GetPane(10); } break; } default: break; }}
视图切换没有问题,现在主界面使用treeview视图 里面是有数据的,当我切换到listview视图如果给这个视图添加数据比如加个函数在OnInitialUpdate里调用 就会报错
请大神看看是什么原因 应该怎么修改
编译器是 VS2013
解决方案
求解答。。。。。。。。。。。。。。。。。
时间: 2024-10-31 05:51:33