最近用VC的多文档多视图框架(MDI)编程实现子窗口的静态分割,分割由程序的菜单控制,当用户单击了分割菜单按钮后,软件会关闭原子窗口,新建子窗口并将新子窗口分割,分割的一个窗口中要照样显示原图形,现在只能重新通过打开文件调入数据再绘图,这样不是很好。
请问新打开的子窗口怎样把原窗口中的数据和图形原样获得并显示,我现在的代码如下,请高手看后指点!!void CChildFrame::OnSplitChildWnd()
{
// TODO: Add your command handler code here
CCreateContext pContext;
pContext.m_pNewViewClass = RUNTIME_CLASS(CSeisImageView);
pContext.m_pCurrentDoc =GetActiveDocument();
ASSERT(pContext.m_pCurrentDoc!=NULL);
if (m_pSplitter1 && m_pSplitter2)
{ //若已分割就恢复普通视图,我想恢复同时分割视图中的图形要照样显示,不知如何实现
delete m_pSplitter1;
delete m_pSplitter2;
m_pSplitter1 = m_pSplitter2=NULL;
SetActiveView((CView*)CreateView(&pContext));
GetActiveView()->OnInitialUpdate();
}
else
{//若未分割,则分割,我想分割后m_pSplitter1->GetPane(0, 0)窗口中同样显示分割前普通窗口中的数据图形,
//但不知怎样操作,敬请高手指点!
CRect rct;
GetActiveView()->GetClientRect(&rct);
GetActiveView()->DestroyWindow();
m_pSplitter1 = new CMySplitter;
m_pSplitter2 = new CMySplitter; if(!m_pSplitter1->CreateStatic(this,1,2))
{
TRACE0("Can't create splitter window1.\n");
return ;
}
if(!m_pSplitter1->CreateView(0,0,RUNTIME_CLASS(CSeisImageView),
CSize(rct.Width() *2/3,rct.Height()),&pContext))
{
m_pSplitter1->DestroyWindow();
TRACE0("Can't create pane(0,0) view.\n");
return ;
} if(!m_pSplitter2->CreateStatic(m_pSplitter1,2,1,WS_CHILD|WS_VISIBLE,
m_pSplitter1->IdFromRowCol(0,1)))
{
TRACE0("Can't create splitter window2.\n");
return ;
}
if(!m_pSplitter2->CreateView(0,0,RUNTIME_CLASS(CSeisImageAmpView),
CSize(rct.Width()/3,rct.Height()/2),&pContext)
|| !m_pSplitter2->CreateView(1,0,RUNTIME_CLASS(CSeisImagePhaseView),
CSize(rct.Width()/3,rct.Height()/2),&pContext))
{
m_pSplitter2->DestroyWindow();
TRACE0("Can't create pane(1,0) or pane(2,0) view.\n");
return ;
}
((CView*)m_pSplitter1->GetPane(0, 0))->OnInitialUpdate();
((CView*)m_pSplitter2->GetPane(0, 0))->OnInitialUpdate();
((CView*)m_pSplitter2->GetPane(1, 0))->OnInitialUpdate();
SetActiveView((CView*)m_pSplitter1->GetPane(0, 0));
}
RecalcLayout();
}
请问新打开的子窗口怎样把原窗口中的数据和图形原样获得并显示,我现在的代码如下,请高手看后指点!!void CChildFrame::OnSplitChildWnd()
{
// TODO: Add your command handler code here
CCreateContext pContext;
pContext.m_pNewViewClass = RUNTIME_CLASS(CSeisImageView);
pContext.m_pCurrentDoc =GetActiveDocument();
ASSERT(pContext.m_pCurrentDoc!=NULL);
if (m_pSplitter1 && m_pSplitter2)
{ //若已分割就恢复普通视图,我想恢复同时分割视图中的图形要照样显示,不知如何实现
delete m_pSplitter1;
delete m_pSplitter2;
m_pSplitter1 = m_pSplitter2=NULL;
SetActiveView((CView*)CreateView(&pContext));
GetActiveView()->OnInitialUpdate();
}
else
{//若未分割,则分割,我想分割后m_pSplitter1->GetPane(0, 0)窗口中同样显示分割前普通窗口中的数据图形,
//但不知怎样操作,敬请高手指点!
CRect rct;
GetActiveView()->GetClientRect(&rct);
GetActiveView()->DestroyWindow();
m_pSplitter1 = new CMySplitter;
m_pSplitter2 = new CMySplitter; if(!m_pSplitter1->CreateStatic(this,1,2))
{
TRACE0("Can't create splitter window1.\n");
return ;
}
if(!m_pSplitter1->CreateView(0,0,RUNTIME_CLASS(CSeisImageView),
CSize(rct.Width() *2/3,rct.Height()),&pContext))
{
m_pSplitter1->DestroyWindow();
TRACE0("Can't create pane(0,0) view.\n");
return ;
} if(!m_pSplitter2->CreateStatic(m_pSplitter1,2,1,WS_CHILD|WS_VISIBLE,
m_pSplitter1->IdFromRowCol(0,1)))
{
TRACE0("Can't create splitter window2.\n");
return ;
}
if(!m_pSplitter2->CreateView(0,0,RUNTIME_CLASS(CSeisImageAmpView),
CSize(rct.Width()/3,rct.Height()/2),&pContext)
|| !m_pSplitter2->CreateView(1,0,RUNTIME_CLASS(CSeisImagePhaseView),
CSize(rct.Width()/3,rct.Height()/2),&pContext))
{
m_pSplitter2->DestroyWindow();
TRACE0("Can't create pane(1,0) or pane(2,0) view.\n");
return ;
}
((CView*)m_pSplitter1->GetPane(0, 0))->OnInitialUpdate();
((CView*)m_pSplitter2->GetPane(0, 0))->OnInitialUpdate();
((CView*)m_pSplitter2->GetPane(1, 0))->OnInitialUpdate();
SetActiveView((CView*)m_pSplitter1->GetPane(0, 0));
}
RecalcLayout();
}
这里有个实例,额,你可以参考一下http://www.vckbase.com/document/viewdoc/?id=257