kein DC mehr Frei



  • CRect CDetailWindow::SetWindowMappingRect(CRect rect)
    {
    CDC *pDC = GetWindowDC();
    SetScreenMapping(*pDC);
    pDC->LPtoDP(rect);
    pDC->ReleaseOutputDC();
    pDC->DeleteDC();
    delete *pDC;
    return rect;
    }

    In folgender Funktion fordere ich eine DC an. Wenn das Programm länger läuft treten komische graphische - Effekte auf. Ich weiß, dass es nur eine begränzte Anzahl von DCs gibt - Gebe ich den DC eigentlich auch wieder richtig frei?

    Folgende Fehlermeldung:
    The instruction at "0x00439d8a" referencd memory at "0x00000000". The memory could not be "read"

    Danke.

    mfG
    Martin



  • Servus,

    ich habe DeleteDC und ReleaseDC getauscht, dann geht es. Aber leider kann ich dir das nicht erklären, warum das so ist 😞

    CRect CDetailWindow::SetWindowMappingRect(CRect rect) 
    { 
    CDC *pDC = GetWindowDC(); 
    SetScreenMapping(*pDC); 
    pDC->LPtoDP(rect); 
    
    pDC->DeleteDC(); // getauscht mit Release
    
    pDC->ReleaseOutputDC(); 
    
    delete *pDC; 
    return rect; 
    }
    

    So geht es aber..... aber keine Erklärung -> keine Ahnung davon 😉

    *winke*
    Hellsgore



  • Seid ihr euch überhaupt sicher, dass man DELETEDC in diesem Fall nutzen darf/ kann/ sollte?

    Denn meines Erachtens würdet ihr damit den Original-DC des "angezapften" Fensters löschen...



  • a schrieb:

    Seid ihr euch überhaupt sicher, dass man DELETEDC in diesem Fall nutzen darf/ kann/ sollte?

    Denn meines Erachtens würdet ihr damit den Original-DC des "angezapften" Fensters löschen...

    Aloha,

    absolut korrekt.

    Ums Delete kümmert sich das Fenster selbst, wenn Du es schließt.

    CDC *pDC = GetWindowDC(); 
    SetScreenMapping(*pDC); 
    pDC->LPtoDP(rect); 
    ReleaseDC(pDC);
    return rect;
    

    ist alles was Du brauchst...

    Die Anzahl Deiner GDI-Objekte kannste übrigens sehr geil mit dem Task Manager betrachten.
    In Deinem Falle müßten die so sehr gewachsen sein, daß der Speicher Deiner Graka irgendwann "Game over" sagte...

    Grüße

    BOA



  • funktioniert.

    Danke


Anmelden zum Antworten