CFormView´s switschen



  • hi

    ich habe folgendes problem:

    ich hab eine SDI mit geteiltem Fenster in VC++ 6 sp5 erstellt.

    siehe hier: http://bilder.internetsuccess.at/programm.jpg

    ich will im endefekt ca. 40 CFormView´s switchen können.
    das heißt, ich habe in vc einfach etliche cformviews (alle eine extra klasse) erstellt, und will sie dann je nach auswahl im menü auf der rechten seite switchen können... je nach dem, welche zu der menüauswahl dazugehört.
    denn ich brauche in jeder cformview meine buttons, listbox´n, eingabefelder usw...

    wie kann ich das machen, ich schaffe dies absolut nicht!!

    wie geht das?

    (falls mich jemand nicht versteht, was ich jett meine: ich vergleiche dies nun mit einer Webseite, wo links das menü ist (dieser frame bleibt immer gleich) und NUR die rechte seite ändert sich (somit 2 frames))

    bitte um hilfe, ich verzweifle voll.....
    danke

    robert



  • Guck dir mal das Makro RUNTIME_CLASS und die Klasse CRuntimeClass an. Dann bastelst du dir ein CSwitchView welches dir die Views von verschiedenen Klassen erstellt und je nach Wunsch anzeigt...



  • hi

    danke für die hilfe! aber ich bin noch recht neu auf diesem gebiet....
    leider sagt mir das garnix.... 😞

    danke



  • Schau mal bei Codeguru, du musst den view in der Doc switchen.

    code:

    BOOL CClassBuilderDoc::SwitchToView(CRuntimeClass *pNewViewClass)
    {
    
        CMainFrame* pMainWnd = (CMainFrame*)AfxGetMainWnd();
        CView* pOldActiveView = pMainWnd->GetActiveView();
    
        // If we're already displaying this kind of view, no need to go further.
        if (pOldActiveView->IsKindOf(pNewViewClass))
            return TRUE;
    
        CSplitterWnd* pSplitter = (CSplitterWnd *)pOldActiveView->GetParent();
        pOldActiveView = (CView*)pSplitter->GetPane(0,1);//damit er nicht den Falschen View Löscht
        int row= 0, col= 1;
        ASSERT(pSplitter->IsChildPane(pOldActiveView, row, col));
        CRect viewrect;
        pOldActiveView->GetWindowRect(&viewrect);
    
        // set flag so that document will not be deleted when view is destroyed
        m_bAutoDelete = FALSE;    
        // Delete existing view 
        pOldActiveView->DestroyWindow();
        // set flag back to default 
        m_bAutoDelete = TRUE;
    //  row = 0;
    //  col = 1;
        // Create new view                      
        CCreateContext context;
        context.m_pNewViewClass = pNewViewClass;
        context.m_pCurrentDoc = this;
        context.m_pNewDocTemplate = this->GetDocTemplate();
        context.m_pLastView = pOldActiveView;
        context.m_pCurrentFrame =NULL;// pMainWnd->GetActiveFrame();
        if (!pSplitter->CreateView(row, col, pNewViewClass, viewrect.Size(), &context))
            return FALSE;
    
        // Set active 
        CMainView* pNewView = (CMainView *)pSplitter->GetPane(row, col);
        pSplitter->GetParentFrame()->SetActiveView(pNewView);
    
        pSplitter->RecalcLayout(); 
        pNewView->SendMessage(WM_PAINT); 
        return TRUE;
    }
    

    Devil



  • CFormView´s switschen

    Was für eine Rechtschreibung!



  • @Duden..... *lol* - ups 🙂

    @devil81

    danke, ich hoffe,das bringt mich weiter, ich versuch es mal!

    danke für deine mithilfe!!

    danke



  • hi

    einen kleinen fehler hab ich noch, dann hab ich es entlich geschafft:

    wenn ich das programm starte, startet es meine 2 dialogfelder am anfang nicht (passworteingabe und so ein introdialog)

    statt dessen kommt dieses bild:
    http://bilder.internetsuccess.at/fehler.jpg

    vielleicht hat jemand ne idee!? denn er soll IMMER Outbar öffnen, automatisch!

    danke
    ciao



  • Quellcode ?



  • BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
        if (!wndSplitter.CreateStatic(this, 1, 2))
            return false;
    
    //  wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CTestView1),  CSize(10,10),pContext);
    
        m_Benutzer = wndSplitter.AddView(0, 1, RUNTIME_CLASS(CSheetBenutzer), pContext);
        m_Benutzergruppen = wndSplitter.AddView(0, 1, RUNTIME_CLASS(CSheetBenutzergruppen), pContext);
        m_Benutzerrechte = wndSplitter.AddView(0, 1, RUNTIME_CLASS(CSheetBenutzerrechte), pContext);
    
        DWORD dwf = CGfxOutBarCtrl::fDragItems|CGfxOutBarCtrl::fEditGroups|CGfxOutBarCtrl::fEditItems|CGfxOutBarCtrl::fRemoveGroups|
                    CGfxOutBarCtrl::fRemoveItems|CGfxOutBarCtrl::fAddGroups|CGfxOutBarCtrl::fAnimation//;
                    |CGfxOutBarCtrl::fSelHighlight;
    
        wndBar.Create(WS_CHILD|WS_VISIBLE, CRect(0,0,0,0), &wndSplitter, wndSplitter.IdFromRowCol(0, 0), dwf);
        wndBar.SetOwner(this);
    

    ich denke, irgendwo da ist das problem, oben beim auskommentierten zeug



  • Wo rufst du den Dialog auf und welche Daten gibt er zurück ?

    Devil



  • ups 😞 das ist mir jetzt aber peinlich *rot werd*

    doch, die 2 dialoge funktionieren jetzt! 🙂

    aber das fenster http://bilder.internetsuccess.at/fehler.jpg kommt noch immer!

    das ist deshalb, weil ich am anfang schon ALLE fenster (CFormView´s zum switchen im rechten frame) lade bzw erzeuge....



  • danke danke für eure hilfen!!!!

    es hat sich erledigt!!
    ein freunt hat mir nen tipp gegeben!!!
    es war nur ne kleinigkeit!

    danke an allen helfern!


Anmelden zum Antworten