关于切分视图,基本上成了,但是还有个毛病,不知原因在哪儿!
qiek 2004-12-19 02:59:26
CMainFrame类里:
CSplitterWnd m_wndSplitter;
CSplitterWnd m_wndSplitter2;
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
//切分为两列
if (!m_wndSplitter.CreateStatic(this, 1, 2))
return FALSE;
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftForm),
CSize(100, 100), pContext))
{
m_wndSplitter.DestroyWindow();
return FALSE;
}
//右边默认是CRightForm表单视图
if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CRightForm),
CSize(100, 100), pContext))
{
m_wndSplitter.DestroyWindow();
return FALSE;
}
CRect r;
GetClientRect(&r);
//宽度1:4
m_wndSplitter.SetColumnInfo( 0, r.Width()/5, 0 );
m_wndSplitter.RecalcLayout();
return TRUE;
}
//右边再切分为两行视图(上边为CRight1Form,下边为CRight2Form)
void CMainFrame::OnViewRight12()
{
// TODO: Add your command handler code here
CWnd * pWnd = m_wndSplitter.GetPane(0,1);
if(pWnd != NULL && pWnd->IsKindOf(RUNTIME_CLASS(CRightForm)))
{
m_wndSplitter.DeleteView(0, 1);
if( !m_wndSplitter2.CreateStatic( &m_wndSplitter, 2, 1, WS_CHILD | WS_VISIBLE, m_wndSplitter.IdFromRowCol(0,1) ) )
return;
if( !m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CRight1Form), CSize(100,200), NULL) )
return;
if( !m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(CRight2Form), CSize(100,0), NULL) )
return;
m_wndSplitter.RecalcLayout( );
}
return;
}
//把右边切分为一个视图(CRightForm)
void CMainFrame::OnViewRight()
{
//
CWnd * pWnd = m_wndSplitter.GetPane(0,1);
if (pWnd != NULL && pWnd->IsKindOf(RUNTIME_CLASS(CSplitterWnd)))
{
pWnd = NULL;
m_wndSplitter2.DestroyWindow();
m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CRightForm),CSize(0, 0), NULL);
m_wndSplitter.RecalcLayout();
}
}
结果出现以下问题:
程序启动后,显示为左右两列,第一列为LeftForm,第二列为RightForm
执行OnViewRight12() 将第二列化分为上下两行,上面是Right1Form,下面是Right2Form,正常。
执行OnViewRight() 将第二列重置为RightForm,正常。
再执行OnViewRight12() ,结果出错!!!
请高手指出错在哪儿了,还缺什么吗?
可以提供程序源代码,我的Email: qiek@263.net