Eine von mehreren Views teilen



  • Hallo

    Ich möchte in meiner SDO MFC Anwendung ein geteiltes Fenster haben. Da bin ich schon auf folgenden Code gestoßen:

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
    
    ...
    
    BOOL bolReturn = TRUE;
    	bolReturn = this->m_wndSplitter.CreateStatic (this, 1, 2);
    	SIZE size;
    	size.cx = (rect.right-rect.left)/2;
    	size.cy = rect.bottom-rect.top;
    	bolReturn = bolReturn && this->m_wndSplitter.CreateView (0, 0, RUNTIME_CLASS (CTxtWatchView), size, pContext);
    	bolReturn = bolReturn && this->m_wndSplitter.CreateView (0, 1, RUNTIME_CLASS (CTxtEditView), size, pContext);
    	break;
    

    Das Problem ist, das ich nicht nur eine Ansicht habe, sondern mit
    CMainFrame::SwitchView die ansichten wechsele:

    switch(TypeOfView)
    	{
        case VIEW_1:
    		if (m_pC_1_View==NULL)//Falls Zeiger noch NULL
    		{
    			MessageBox("ERROR002: Es gibt keinen Zeiger auf das Menü!");
    			return;
    		}
            pNewView=m_pCMenueView;
    		break;
    
    	case VIEW_2:
    		if (m_pC_2_View==NULL)
    		{
    			CRuntimeClass *pCR=RUNTIME_CLASS(C_2_View); 
    			m_pCDctView = static_cast<CScrollView*>(pCR->CreateObject()); 
    			//ID des Views ungleich AFX_IDW_PANE_FIRST setzen 
    			m_pCDctView->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW 
                                 ,rectDefault,this,AFX_IDW_PANE_FIRST+1,NULL);
    		}
    		pNewView=m_pCDctView;
    		break;
    
    //Zeiger auf Dokument holen
    	CDocument *pDoc=pOldView->GetDocument();
    	//View mit Doc verbinden
    	pDoc->AddView(pNewView);
    	pDoc->RemoveView(pOldView);
    
    	//Aktives View dem Rahmenfenster mitteilen:
    	SetActiveView(pNewView);
    

    Meine Frage:
    Wie kann ich ein einzelnes, bestimmtes View splitten? Wo muss ich da obigen Code (ggf. modifiziert) einfügen?

    Ich hoffe ihr könnt mir helfen, vielen Dank schon mal im voraus.



  • Das würde mich auch brennend interessieren. Die einzige Idee die ich hätte wäre dem DocManager ein FrameWnd als View zu verkaufen und dort wieder OnCreateClient zu überschreiben oder aber in ein View einen weiteren 'MainFrame' einzufügen. Aber ist nur so eine Idee... und ich hab keine Ahnung ob man das irgendwie ins Doc/View-Model einpassen kann.



  • Weiß denn keiner ne Lösung?


Anmelden zum Antworten