splitter window in drei Bereiche



  • ich habe eine SDI anwendung und möchte mein Fenster in 3 Bereiche Teilen.
    ich konnte das Fenster bis jetzt in 2 Bereichen teilen aber ich weiss nicht wie ich den zweiten bereich auch in 2 unterBereiche teile (diesmal in 2 zeilen)

    ich habe die idee aus das tutorial genommen
    http://www.codeproject.com/splitter/splitterwindowtutorial.asp

    mein code sieht so aus

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    	// TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    	//calculate client size 
    CRect cr; 
    GetClientRect( &cr);
    
    if ( !m_mainSplitter.CreateStatic( this, 1, 2 ) ) 
    { 
        MessageBox( "Error setting up splitter frames!", 
                      "Init Error!", MB_OK | MB_ICONERROR ); 
        return FALSE; 
    }
    
    if ( !m_mainSplitter.CreateView( 0, 0, 
           RUNTIME_CLASS(CSplitterWindowView), 
           CSize(cr.Width()/8, cr.Height()), pContext ) ) 
    { 
        MessageBox( "Error setting up splitter frames!", 
                    "Init Error!", MB_OK | MB_ICONERROR );
        return FALSE; 
    }
    
    if ( !m_mainSplitter.CreateView( 0, 1, 
            RUNTIME_CLASS(CSplitterWindowView), 
            CSize(cr.Width()*(3/4), cr.Height()), pContext ) ) 
    { 
        MessageBox( "Error setting up splitter frames!", 
            "Init Error!", MB_OK | MB_ICONERROR );
        return FALSE; 
    }
    
    /*if ( !m_mainSplitter.CreateView( 1, 1, 
            RUNTIME_CLASS(CSplitterWindowView), 
            CSize(cr.Width()*(3/4), cr.Height()/2), pContext ) ) 
    { 
        MessageBox( "Error setting up splitter frames!", 
            "Init Error!", MB_OK | MB_ICONERROR );
        return FALSE; 
    }*/
    
    m_bInitSplitter = TRUE;
    return TRUE;
    }
    


  • if (!m_mainSplitter.CreateStatic(this, 1, 2))
    	{
    		TRACE0("Failed to CreateStaticSplitter\n");
    		return FALSE;
    	}
    
    	if (!m_wndSplitterLR.CreateView(0, 1, RUNTIME_CLASS(CSplitterWindowView), CSize(0, 0), pContext))
    	{
    		TRACE0("Failed to create first pane\n");
    		return FALSE;
    	}
    
    	m_mainSplitter.SetColumnInfo(0, 200, 0);
    
    	if (!m_mainSplitter2.CreateStatic(&m_mainSplitter, 2, 1, WS_CHILD | WS_VISIBLE, mainSplitter.IdFromRowCol(0, 0)))
    	{
    		TRACE0("Failed to CreateStaticSplitter\n");
    		return FALSE;
    	}
    	if (!m_mainSplitter2.CreateView(0, 0, pContext->m_pNewViewClass, CSize(0, 200), pContext))
    	{
    		TRACE0("Failed to create second pane\n");
    		return FALSE;
    	}
    	if (!m_mainSplitter2.CreateView(1, 0, RUNTIME_CLASS(CSplitterWindowView), CSize(0, 0), pContext))
    	{
    		TRACE0("Failed to create third pane\n");
    		return FALSE;
    	}
    

    Hoffe mal das das funzt.. ist nicht getestet 😃



  • hallo
    danke für die Antwort
    ich habe noch eine Frage: brauche ich insgesamt 3 CSplitterWnd Objekte ?
    ich habe den code jetzt so gebastelt aber der erste Bereich wird geteilt(die erste Spalte) und nicht der zweite Bereich was eigentlich gewünscht ist.

    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    	// TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    	//calculate client size 
    CRect cr; 
    GetClientRect( &cr);
    
    if ( !m_mainSplitter.CreateStatic( this, 1, 2 ) ) 
    { 
        MessageBox( "Error setting up splitter frames!", 
                      "Init Error!", MB_OK | MB_ICONERROR ); 
        return FALSE; 
    }
    
    if ( !m_mainSplitter.CreateView( 0, 1, 
           RUNTIME_CLASS(CSplitterWindowView), 
           CSize(cr.Width()/8, cr.Height()), pContext ) ) 
    { 
        MessageBox( "Error setting up splitter frames!", 
                    "Init Error!", MB_OK | MB_ICONERROR );
        return FALSE; 
    }
    
    /*if (!m_wndSplitterLR.CreateView(0, 1, RUNTIME_CLASS(CSplitterWindowView), CSize(0, 0), pContext)) 
        { 
            TRACE0("Failed to create first pane\n"); 
            return FALSE; 
        } 
    
        m_mainSplitter.SetColumnInfo(0, 200, 0); 
    */
    
    if (!m_mainSplitter2.CreateStatic(&m_mainSplitter, 2, 1, WS_CHILD | WS_VISIBLE, m_mainSplitter.IdFromRowCol(0, 0))) 
        { 
            TRACE0("Failed to CreateStaticSplitter\n"); 
            return FALSE; 
        } 
        if (!m_mainSplitter2.CreateView(0, 0, pContext->m_pNewViewClass, CSize(0, 200), pContext)) 
        { 
            TRACE0("Failed to create second pane\n"); 
            return FALSE; 
        } 
        if (!m_mainSplitter2.CreateView(1, 0, RUNTIME_CLASS(CSplitterWindowView), CSize(0, 0), pContext)) 
        { 
            TRACE0("Failed to create third pane\n"); 
            return FALSE; 
        } 
    
    m_bInitSplitter = TRUE;
    return TRUE;
    }
    


  • CSplitterWnd - CreateStatic
    CSplitterWnd - CreateView

    Guck dir die mal an... dann guck mal ganzgenau bei den Paramteren Col und Row... das sollte dir vllt weiterhelfen.. damit kannst de das nähmlich einstellen...


Anmelden zum Antworten