首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

新手急问:视图分割 + 单文档多视图 可以实现吗?解决方法

2012-01-26 
新手急问:视图分割 + 单文档多视图 可以实现吗??我建了一个单文档程序,首先通过文档关联了两个视图,可以互

新手急问:视图分割 + 单文档多视图 可以实现吗??
我建了一个单文档程序,首先通过文档关联了两个视图,可以互相切换。
然后我把第一个视图View1即当前活动视图用CSplitterWnd分割为一行两列(在MainFrame的OnCreateClient中)。
最后我想把当前处于隐藏状态的另一个视图View2分割为两行一列,还是在OnCreateClient中,结果还是分割的还是当前活动视图View1。
无论怎样都无法分割另一个视类,请问是不是实现不了?如果可以,怎样实现呢?
不知道我说清楚没有啊?
请高手来答疑解惑!
谢谢

[解决办法]
#include "ViewOne.h "
#include "ViewTwo.h "
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
m_wndSplitter1 = new CSplitterWnd();

BOOL bCreateSpltr = m_wndSplitter1-> CreateStatic( this, 1, 2);

m_wndSplitter1-> CreateView(0, 0, RUNTIME_CLASS(CViewOne), CSize(100,100), pContext);
m_wndSplitter1-> CreateView(0, 1, RUNTIME_CLASS(CViewOne), CSize(100,100), pContext);

return bCreateSpltr;
}

void CMainFrame::OnChangeview()
{
bchange = !bchange;

bchange ? SetViewTwo() : SetViewOne();
}

void CMainFrame::SetViewOne()
{
m_pNewView = RUNTIME_CLASS(CViewOne);

Context.m_pNewViewClass = m_pNewView;
Context.m_pCurrentFrame = this;
Context.m_pCurrentDoc = GetActiveDocument();

CView *pNewView = STATIC_DOWNCAST(CView, CreateView(&Context));

if(pNewView != NULL)
{
if(NULL == m_wndSplitter1) m_wndSplitter1 = new CSplitterWnd();
if(m_wndSplitter1-> CreateStatic( this, 1, 2))
{
m_wndSplitter1-> CreateView(0, 0, RUNTIME_CLASS(CViewOne), CSize(300,0), &Context);
m_wndSplitter1-> CreateView(0, 1, RUNTIME_CLASS(CViewOne), CSize(0,0), &Context);
}
pNewView-> OnInitialUpdate();
pNewView-> ShowWindow(SW_SHOW);
SetActiveView(pNewView);
RecalcLayout();

m_wndSplitter2-> DestroyWindow();
m_wndSplitter2 = NULL;
}
}

void CMainFrame::SetViewTwo()
{
m_pNewView = RUNTIME_CLASS(CViewTwo);

Context.m_pNewViewClass = m_pNewView;
Context.m_pCurrentFrame = this;
Context.m_pCurrentDoc = GetActiveDocument();

CView *pNewView = STATIC_DOWNCAST(CView, CreateView(&Context));

if(pNewView != NULL)
{
if(NULL == m_wndSplitter2) m_wndSplitter2 = new CSplitterWnd();
if(m_wndSplitter2-> CreateStatic( this, 1, 2))
{
m_wndSplitter2-> CreateView(0, 0, RUNTIME_CLASS(CViewTwo), CSize(300,0), &Context);
m_wndSplitter2-> CreateView(0, 1, RUNTIME_CLASS(CViewTwo), CSize(0,0), &Context);
}
pNewView-> OnInitialUpdate();
pNewView-> ShowWindow(SW_SHOW);
SetActiveView(pNewView);
RecalcLayout();

m_wndSplitter1-> DestroyWindow();
m_wndSplitter1 = NULL;
}
}

热点排行