Hilfe zu Code?



  • Also ich habe mir den Code von devil mal genommen und ihnbei mir eingebaut, ging darum in einem Splitter ein View zu ersetzen.Hier nochmal der Code:

    BOOL CHomeBankingDoc::SwitchToView(CRuntimeClass *pNewViewClass)
    {
        CFrameWnd* pMainWnd = (CFrameWnd*)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, col;
        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;
    
        // Create new view                      
        CCreateContext context;
        context.m_pNewViewClass = pNewViewClass;
        context.m_pCurrentDoc = this;
        context.m_pNewDocTemplate = NULL;
        context.m_pLastView = NULL;
        context.m_pCurrentFrame = NULL;
    
        if (!pSplitter->CreateView(row, col, pNewViewClass, viewrect.Size(), &context))
            return FALSE;
    
        // Set active 
        CView* pNewView = (CView *)pSplitter->GetPane(row, col);
        pSplitter->GetParentFrame()->SetActiveView(pNewView);
    
        pSplitter->RecalcLayout(); 
        pNewView->SendMessage(WM_PAINT); 
    
        return TRUE;
    }
    

    so den rufe ich nun in einer Clixk nachricht eines button so auf:

    CRuntimeClass* pNewViewClass = RUNTIME_CLASS(CRightView);
       if (!SwitchToView(pNewViewClass))
          // failed
       else
          // succeeded
    

    Mein rpoblem er stürzt immer ab. Warum??????
    Ich habe ganz normal ein Spliietr erzeugt in Mainframe mit CreateStatic.

    thx im voraus



  • Debugger?



  • Außerdem ist der Code höchst gefährlich. Nirgendwo wird auf NULL-Pointer gecheckt.



  • Nagut, aber warum er net funzt könnt ihr mir net zufällig sagen?

    Kenn den jemand von euch noch ne möglichkeit die View in einem SplitterPane auszutauschen?



  • Sag uns doch einfach bei welcher Zeile der Code abstürzt. Wir sind doch keine Hellseher.



  • Also er stürzt nur im realese mode ab. Splange ich im Debug Ausführe funzt allet, aber sobald ich in Realese gehe und dann ausführe stürzt er ab.
    Unzwar bei CreateView, das ist sein knackpunkt.

    [ Dieser Beitrag wurde am 09.02.2003 um 18:28 Uhr von xyz44 editiert. ]



  • Is doch lächerlich. Du wirst doch wohl noch herausfinden wo er abstürzt. Wenn es im Debug-Modus läuft sind irgendwelche Variablen nicht richtig initialisiert. Da gab es jetzt schon tausende Threads drüber.



  • Du solltest die Funktion unbedingt überarbeiten und nicht einfach kopieren. Überprüfe bitte alle Rückgabewerte der Funktionen (Nullzeiger) wie dir bereits geraten wurde. Und was ist z.B. mit

    int row, col;

    Sie werden nirgendwo mit Werten gefüllt, so wie ich das sehe.


Anmelden zum Antworten