003
10.09.2003, 21:57 Uhr
mike
Pinguinhüpfer (Operator)
|
Hi! Einfach eine SDI Erstellen. Dann eine allgemeine Klasse von CSplitterWnd ableiten (in meinem Sample CMultiSplitter)
C++: |
BOOL CMultiSplitterWnd::ReplaceView(int row, int col, CRuntimeClass *pViewClass, SIZE size) { CCreateContext context; BOOL bSetActive; if ((GetPane(row,col)->IsKindOf(pViewClass))==TRUE) return FALSE; CDocument * pDoc = ((CView *)GetPane(row,col))->GetDocument(); CView * pActiveView = GetParentFrame()->GetActiveView(); if (pActiveView == NULL || pActiveView == GetPane(row,col)) bSetActive = TRUE; else bSetActive = FALSE;
((CView *) GetPane(row,col))->DestroyWindow(); context.m_pNewViewClass = pViewClass; context.m_pCurrentDoc = pDoc; context.m_pNewDocTemplate=NULL; context.m_pLastView=NULL; context.m_pCurrentFrame=NULL; CreateView(row,col,pViewClass,size, &context); CView* pNewView= (CView *)GetPane(row,col); if (bSetActive==TRUE) GetParentFrame()->SetActiveView(pNewView); RecalcLayout(); GetPane(row,col)->SendMessage(WM_PAINT); return TRUE; }
|
Damit kannst du Views sitchen
C++: |
CMainFrame *pMainFrame=(CMainFrame*)AfxGetMainWnd(); pMainFrame->m_wndSplitter.ReplaceView(0,1,RUNTIME_CLASS(CFileView),CSize(100,100));
|
in CMianFrame OnCreateClient einfügen
C++: |
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { // TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen if(!m_wndSplitter.CreateStatic(this, 1, 2) || !m_wndSplitter.CreateView(0,0, RUNTIME_CLASS(CDirTreeView), CSize(160,0), pContext) || !m_wndSplitter.CreateView(0,1, RUNTIME_CLASS(CFileView), CSize(0,0),pContext)) { return false; }
return true; }
|
Den Rest würd ich per Win API machen http://schueler.bulme.at/~vodep_mi/Dir.zip
Es gibt das ganze aber auch schon fertig auf codeproject Aber bis man da den Durchblick hat, ist man mit "made by hand" schneller unterwegs
mfg --
|