关于这方面的知识点,网上的资料很多,现在和大家分享下我自己碰到的问题。
首先应该先定义这样的变量用来切分窗口:CSplitterWnd m_wndSplitter;CSplitterWnd m_wndSplitter1;
然后是编写一下的代码来实现切分视图
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs,CCreateContext* pContext)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rc;
GetClientRect(rc);
int cx,cy;
int FrmHeight = GetSystemMetrics(SM_CYCAPTION);//获得主窗口的标题栏、菜单栏的总高度
FrmHeight += GetSystemMetrics(SM_CXMENUSIZE);
cx =GetPrivateProfileInt("Settings","width",0,".\\Config1.ini");
cy =GetPrivateProfileInt("Settings","height",0,".\\Config1.ini");
CSize paneSize(cx-5,cy-200),paneSize2(200,cy),paneSize3(cx-5,200);
m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CMyTreeView),paneSize2,pContext);
m_wndSplitter1.CreateStatic(&m_wndSplitter,2,1,WS_CHILD|WS_VISIBLE,m_wndSplitter.IdFromRowCol(0,0));
m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(CVTPlayer_MFCView),paneSize,pContext);
m_wndSplitter1.CreateView(1,0,RUNTIME_CLASS(CAlarmView),paneSize3,pContext);
m_wndSplitter.RecalcLayout();
return TRUE;
}
此时运行程序的话,你会发现视图是被分成了三部分,但是其大小并非真的如参数paneSize,paneSize1,paneSize2所规定的大小。经过各种努力,发现CreateView中的第四个参数实际上是不起作用的,所以你应该添加下面的代码来控制各视图的大小
m_wndSplitter.SetColumnInfo(0,cx,cx);
m_wndSplitter.SetColumnInfo(1,200,200);
m_wndSplitter1.SetRowInfo(0,cy-200,cy-200);
m_wndSplitter1.SetRowInfo(1,200,200);