TreeCtrl in CFormView macht probleme...(splitterwindow)



  • Hi, also ich habe eine Anwendung, auf der einen Seite einen TreeView (der nicht das Problem ist),
    sondern in dem Dialog von CFormView ist ebenfalls ein TreeView vorhanden.
    Wenn ich den Dialog austausche (Notwendige Protzedur, da ich mehrere Dialoge verwende)
    bekomm ich beim Versuch den TreeView zu füllen eine Fehlermeldung.

    Der Fehler tritt erst auf, wenn ich die Views ausgetauscht habe, also müsste
    dort die Quelle liegen :

    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;
    }
    

    Ich habe schon verschiedenes Ausprobiert, aber es hat keinen Erfolg gebracht.

    Der Debugger zeigt an, das er beim Zugriff auf das TreeCtrl einen Fehler auslöst:

    BOOL CWnd::ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags)
    {
        ASSERT(::IsWindow(m_hWnd));//hier tritt fehler auf
    
        if (m_pCtrlSite == NULL)
            return ModifyStyle(m_hWnd, dwRemove, dwAdd, nFlags);
        else
            return m_pCtrlSite->ModifyStyle(dwRemove, dwAdd, nFlags);
    }
    

    Im Releasemodus wird der Fehler nicht mehr angezeigt, aber das ausführen des Codes
    bewirkt nichts, so fügt er bei InsertItem(..) dann nichts mehr ein z. B..

    Wo könnte die Ursache dafür sein ?

    Devil



  • Dein TreeView scheint noch nicht erstellt zu sein ...



  • Da steht doch exakt der Fehler. Es ist kein gültiges Fensterhandle.



  • ich kanns aber sehen ... 😉
    Müsste ich es dann explizit erstellen ?
    Also mit Create ?



  • vielleicht kannst du es erst nach dem Fehler sehen?
    Naja, ich kann jetzt nur raten, ich kenn deinen Code ja net ...



  • Nein, ich kann (zumindest die Weisefläche, sieht aus wie ne editbox oder ein Leeres TreeCtrl, da ich das TreeCtrl schon im D-Editor erzeugt habe...) es direkt sehen,
    der Fehler tritt dann erst beim Zugriff auf. Wenn ich über die Ctrl- Variable
    was einfügen will z.B.

    Devil



  • Das wars. Mit Create funzt es jetzt wieder.
    thx.

    Devil


Anmelden zum Antworten