Здравствуйте, Vis, Вы писали:
Vis>Сожно ли как-то использововать СSplitterWnd без модели документ/вид?
Vis>Еслм да, можно показать пример? Заранее спасибо.
Можно, например если создать приложение MFC SDI без поддержки Doc/View архитектуры,
в классе CChildView создать обработчик WM_CREATE:
int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
CRect rect;
GetClientRect(&rect);
// create splitter
if (!m_wndSplitter.CreateStatic(this, 2, 1))
{
TRACE0("Failed to create splitter!");
return -1;
}
CCreateContext ccx;
ccx.m_pNewViewClass = RUNTIME_CLASS(CHtmlView);
// create first view
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CHtmlView), CSize(0,rect.Height()/2), &ccx))
{
TRACE0("Failed to create first splitter pane!");
return -1;
}
// create second view
ccx.m_pNewViewClass = RUNTIME_CLASS(CHtmlView);
if (!m_wndSplitter.CreateView(1, 0, RUNTIME_CLASS(CHtmlView), CSize(100,rect.Height()/2), &ccx))
{
TRACE0("Failed to create second splitter pane!");
return -1;
}
CHtmlView *pView1 = (CHtmlView*)m_wndSplitter.GetPane(0,0);
CHtmlView *pView2 = (CHtmlView*)m_wndSplitter.GetPane(1,0);
//m_pDetailsView = (CDetailsView *)m_wndSplitter.GetPane(0,0);
//m_pChartView = (CChartView *)m_wndSplitter.GetPane(1,0);
pView1->ShowWindow(SW_SHOW);
pView1->OnInitialUpdate();
pView2->ShowWindow(SW_SHOW);
pView2->OnInitialUpdate();
CMainFrame *pMain = (CMainFrame *)(theApp.GetMainWnd());
pMain->SetActiveView((CView*)m_wndSplitter.GetPane(0,0));
return 0;
}
На всякий случай почитайте зачем используется CCreateContext и вообще о внутреннем устройстве MFC.
Кстати рассмотрите возможность использования СSplitterWndEx, если используете MFC Pack 1.