我就想知道如何用csplitterwnd类去拆分SDI的单文档窗口。
现在框架类中声明了一个对象m_splitter
然后重载OnCreateClient添加代码
m_splitter.CreateStatic(this,1,2);
m_splitter.CreateView(0,0,RUNTIME_CLASS(CmView),CSize(500,500),pContext);
m_splitter.CreateView(0,1,RUNTIME_CLASS(CmView),CSize(500,500),pContext);
结果发现没变化
然后又加了加
m_splitter.SetColumnInfo
m_splitter.SetRowInfo
m_splitter.RecalcLayout();
这几个语句,还是没变化。
我实在找不到原因。
现在框架类中声明了一个对象m_splitter
然后重载OnCreateClient添加代码
m_splitter.CreateStatic(this,1,2);
m_splitter.CreateView(0,0,RUNTIME_CLASS(CmView),CSize(500,500),pContext);
m_splitter.CreateView(0,1,RUNTIME_CLASS(CmView),CSize(500,500),pContext);
结果发现没变化
然后又加了加
m_splitter.SetColumnInfo
m_splitter.SetRowInfo
m_splitter.RecalcLayout();
这几个语句,还是没变化。
我实在找不到原因。
m_splitter.CreateView(0,1,RUNTIME_CLASS(CmView),CSize(500,500),pContext); 这两个值不能相同,CreateView是为分割视图分配View的,你两个值都是相同了,不允许。你应该新建一个View类,然后用其名字代替掉以上的第二个。当然还应该在MainFrame.cpp中包含其头文件
m_splitter.CreateStatic(this,1,2);
m_splitter.CreateView(0,0,RUNTIME_CLASS(CmView),CSize(500,500),pContext);
m_splitter.CreateView(0,1,RUNTIME_CLASS(CmView),CSize(500,500),pContext);
是不是主窗口太小没有看到?注意看一下窗口的右边框是不是变粗了。
拆分的窗口用相同的类应该是可以的。用新建的VIEW类我也用过了,还是不行的。
头痛啊。
第二个CSize(500,500)改成CSize(0,0)试试
代码应该没问提,应该还是窗口大小问题
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{ m_splitter.CreateStatic(this,1,2);
m_splitter.CreateView(0,0,RUNTIME_CLASS(CmView),CSize(500,500),pContext);
m_splitter.CreateView(0,1,RUNTIME_CLASS(CmView),CSize(500,500),pContext); return TRUE;// return CFrameWnd::OnCreateClient(lpcs, pContext);
}
}
将OnCreateClient中的return CFrameWnd::OnCreateClient(lpcs, pContext);改为return TRUE;就可以了
return CFrameWnd::OnCreateClient(lpcs, pContext);
改成:return TRUE;if (!m_Split.CreateStatic(this,1,2))
return FALSE;
if (!m_Split.CreateView(0,0,pContext->m_pNewViewClass,CSize(250,0),pContext))
return FALSE;
if (!m_Split.CreateView(0,1,RUNTIME_CLASS(CVideoView2),CSize(0,0),pContext))
return FALSE;
SetActiveView((CView *)m_Split.GetPane(0,0));
return TRUE;
//return CFrameWnd::OnCreateClient(lpcs, pContext);
}
CFrameWnd类的OnCreateClient(……)方法是虚的。如下:
protected:
virtual BOOL OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext);
我们要实现窗口分割就应该重载该方法,所以当然不能再用 return CFrameWnd::OnCreateClient(lpcs, pContext);这一句了。这也就是为什么始终看不到窗口切分效果的原因。