1.在OnCreateClient函数中有这样一段代码:
m_splitter.CreateStatic(this, 2, 1);
m_splitter.CreateView(0,0, pContext->m_pNewViewClass, CSize(200, 200), pContext);
m_splitter.CreateView(1,0, RUNTIME_CLASS(CIncomeDlg), CSize(200, 200), pContext);
m_splitter1.CreateStatic(&m_splitter ,1,2,WS_CHILD|WS_VISIBLE, m_splitter1.IdFromRowCol(0, 0));
m_splitter1.CreateView(0,0,RUNTIME_CLASS(CIncomeDlg), CSize(200, 200), pContext);
m_splitter1.CreateView(0,0,RUNTIME_CLASS(CIncomeDlg), CSize(200, 200), pContext); 我的目的是,在第一个splitter的上下(0,0)中再创建一个splitter,分割成左右。编译无问题,但运行出错,想请教一下为什么,应该如何实现。2.因为在(1.0)是个CFormView,我创建了一个按钮,此按钮可以动态分割view,但我把按钮事件实现放在CMainFram中无法相应,我只能在CFormView中实现,让后((CMainFrame*)AfxGetMainWnd())->OnBnClickedButton1();我觉得这种实现有问题,想问问应该如何实现。
m_splitter.CreateStatic(this, 2, 1);
m_splitter.CreateView(0,0, pContext->m_pNewViewClass, CSize(200, 200), pContext);
m_splitter.CreateView(1,0, RUNTIME_CLASS(CIncomeDlg), CSize(200, 200), pContext);
m_splitter1.CreateStatic(&m_splitter ,1,2,WS_CHILD|WS_VISIBLE, m_splitter1.IdFromRowCol(0, 0));
m_splitter1.CreateView(0,0,RUNTIME_CLASS(CIncomeDlg), CSize(200, 200), pContext);
m_splitter1.CreateView(0,0,RUNTIME_CLASS(CIncomeDlg), CSize(200, 200), pContext); 我的目的是,在第一个splitter的上下(0,0)中再创建一个splitter,分割成左右。编译无问题,但运行出错,想请教一下为什么,应该如何实现。2.因为在(1.0)是个CFormView,我创建了一个按钮,此按钮可以动态分割view,但我把按钮事件实现放在CMainFram中无法相应,我只能在CFormView中实现,让后((CMainFrame*)AfxGetMainWnd())->OnBnClickedButton1();我觉得这种实现有问题,想问问应该如何实现。
m_splitter.CreateStatic(this, 2, 1);
m_splitter1.CreateStatic(&m_splitter ,1,2,WS_CHILD|WS_VISIBLE, m_splitter1.IdFromRowCol(0, 0));
m_splitter.CreateView(0,0, pContext->m_pNewViewClass, CSize(200, 200), pContext);
m_splitter.CreateView(1,0, RUNTIME_CLASS(CIncomeDlg), CSize(200, 200), pContext);
m_splitter1.CreateView(0,0,RUNTIME_CLASS(CIncomeDlg), CSize(200, 200), pContext);
m_splitter1.CreateView(0,0,RUNTIME_CLASS(CIncomeDlg), CSize(200, 200), pContext);
两个CreateStatic都先调用2.一般都在FormView里响应按钮消息,因为消息不传递到CMainFrame,非要在CMainFrame里响应,可以SendMessage给CMainFrame
嗯,说的对,我测试了一下,确实不必都先调用 :)
我之前也有做过段代码,跟你的类似,你可参考一下,是正确的
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{ CRect rt;
GetClientRect(rt); if(m_wndSplitter1.CreateStatic(this,2,1)==NULL)
return FALSE; if(m_wndSplitter2.CreateStatic(&m_wndSplitter1,1,2,WS_CHILD|WS_VISIBLE,m_wndSplitter1.IdFromRowCol(0, 0))==NULL) return FALSE; m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CProjTreeView),CSize(rt.Width()/3,0),pContext); m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CRightInfoView),CSize(0,0),pContext); m_wndSplitter1.CreateView(1,0,RUNTIME_CLASS(CUnDemoView),CSize(0,rt.Height()/3),pContext); m_wndSplitter1.SetRowInfo(0,2*rt.Height()/3,0); return TRUE;
}
context.m_pCurrentFrame = (CMainFrame*)m_splitter.GetPane(1,0);
context.m_pCurrentDoc = NULL;
context.m_pNewViewClass = RUNTIME_CLASS(CIncomeDlg);
context.m_pNewDocTemplate = NULL; m_splitter.DeleteView(1,0);
m_splitter2.Create(&m_splitter ,2,2, CSize(50, 50), &context); m_splitter2.CreateView(0,0,
RUNTIME_CLASS(CIncomeDlg), CSize(200, 200), &context); m_splitter2.CreateView(0,1,
RUNTIME_CLASS(CIncomeDlg), CSize(200, 200), &context); m_splitter2.CreateView(1,0,
RUNTIME_CLASS(CIncomeDlg), CSize(200, 200), &context); m_splitter2.CreateView(1,1,
RUNTIME_CLASS(CIncomeDlg), CSize(200, 200), &context);