在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