对于一个SDI工程Test
首先给CMainFrame增加CSplitterWwnd类型变量m_wndSplit。
如果想分割成左右下三个View,在工程中添加以CView为基础类的CViewOri类,CViewLine类和CViewRes类
重写CMainFrame类的OnCreateClient函数如下
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
BOOL bCreateSpltr = m_wndSplit1.CreateStatic( this, 2, 1);
// splitter 2 : 1*2
bCreateSpltr = m_wndSplit2.CreateStatic(&m_wndSplit1, 1, 2, WS_CHILD | WS_VISIBLE | WS_BORDER,
m_wndSplit1.IdFromRowCol(0,0));
// create each view
m_wndSplit2.CreateView(0, 0,RUNTIME_CLASS(CViewOri), CSize(0, 0), pContext);
m_wndSplit2.CreateView(0, 1,RUNTIME_CLASS(CViewRes), CSize(0, 0), pContext);
m_wndSplit1.CreateView(1, 0,RUNTIME_CLASS(CViewLine), CSize(0, 0), pContext);
CRect rect;
GetClientRect(&rect);
m_wndSplit1.SetRowInfo(0,rect.Height()*4/5,0);
m_wndSplit2.SetColumnInfo(0,rect.Width()/2,0);
return bCreateSpltr;
}
欲得到View的指针,不能简单使用GetActiveView,可从MainFrame的CSplitterWnd成员得到,如下
CMainFrame* pMF=(CMainFrame*)AfxGetApp()->m_pMainWnd;
CViewRes* pViewRes=(CViewRes*)pMF->m_wndSplit2.GetPane(0,1);
注意:使用CMainFrame,要在调用的cpp文件中包含MainFrame.h
函数结尾必须返回bCreateSpltr,而不是返回CFrameWnd::OnCreateClient(lpcs, pContext);
(文章来源与 女人的猫 博客)
本文介绍如何在SDI工程中实现复杂的视图分割,包括创建静态分割窗口、定制不同类型的视图类以及通过重写OnCreateClient函数来设置布局。此外,还提供了获取特定视图指针的方法。
1478

被折叠的 条评论
为什么被折叠?



