问个关于分割窗口的问题。
大家都知道怎么在CMainFrame::OnCreateClient()中怎么分割窗口。
但我现在不想在窗口一打开就分开。
我想在满足一定条件的时候才分割窗口。
举个简单的例子,比如我点一下某个菜单项才分割窗口。
所以我把在CMainFrame::OnCreateClient中分割窗口的代码放到
OnSplitterwnd() 里面。
添加如下代码:
CCreateContext pContext;
pContext.m_pCurrentDoc = GetActiveDocument();
pContext.m_pNewViewClass = RUNTIME_CLASS(CPubDlg); //CPubDlg为一个CFormView类
pContext.m_pCurrentFrame = (CMainFrame *)AfxGetMainWnd();
然后用pContext来作为m_wndSplitter.CreateView里参数分割窗口
编译没错,但是运行后没有效果,窗口还是原来那样。
请问这个思路是否可行?如果可行的话应该怎么写呢?
切了以后刷新下窗口看看,RecalcLayout()函数
可以的啊.
CSplitterWnd m_wndSplitter;
// create splitter window
if (!m_wndSplitter.CreateStatic(this, 1, 2))
return;
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(250, 100), NULL) ||
!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CRightView), CSize(100, 100), NULL))
{
return;
}
void CMainFrame::OnViewSplitter()
{
CCreateContext context;
context.m_pCurrentDoc = GetActiveDocument();
context.m_pNewViewClass = RUNTIME_CLASS(CSdiTestView);
CView *pOldView = GetActiveView();
if (!m_wndSplitter.CreateStatic(this, 1, 2))
return;
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(250, 100), NULL) ||
!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CRightView), CSize(100, 100), NULL))
{
return;
}
pOldView->ShowWindow(SW_HIDE);
RecalcLayout();
}