Animation stoppt nach 10 sek von alleine



  • und leute wie du kriegen ein studium bei ibm? traurig traurig



  • ach verdammt - ich steh halt einfach nur noch aufm schlauch und dazu kommt noch dass ich schon ewig nix mehr mit der WinAPI gemacht hab 8[ afk petzold rauskramen XD

    EDIT: So müsste doch alles freigegeben sein, Problem besteht jedoch weiterhin...

    hdc=GetDC(hWnd);
    backbuffer=CreateCompatibleDC(hdc);		
    
    SelectObject(backbuffer,CreateCompatibleBitmap(backbuffer,WNDWIDTH,WNDHEIGHT));
    
    FillRect(backbuffer,drawrec,CreateSolidBrush(RGB(255,255,255)));
    
    //zeichnen
    
    BitBlt(hdc,deleterc->left,deleterc->top,deleterc->right,deleterc->bottom,backbuffer,deleterc->left,deleterc->top,SRCCOPY);	
    
    InvalidateRect(hWnd,drawrec,FALSE);	
    
    DeleteObject(GetCurrentObject(backbuffer,OBJ_BITMAP));
    ReleaseDC(hWnd,backbuffer);
    ReleaseDC(hWnd,hdc);
    


  • kannste mal im taskmanager schauen ob die handles immer zunehmen wenn dein proggie läuft, da weisste ob du alles richtig freigegeben hast



  • also die speicherauslastung nimmt immer weiter zu.. Aber ist Freigabe wirklich ein Grund, dass es einfach aufhört neu zu zeichnen?? Ich mein die Zeichenfunktionen und Blt und alles werden immer noch ausgeführt nur es wird scheinbar ein weisses Bild (backbuffer) auf den Bildschirm kopiert, ich verstehe nicht warum, bzw. wie sowas überhaupt sein kann oder durch was es verursacht werden könnte...

    EDIT: Sehr interessant, hab das Programm jetzt während des Antwort schreibens laufen gelassen und jetzt tabb ich wieder rein und zack wird oben der Fensterkopf sowie eine Scrollbar im Fenster nicht mehr richtig angezeigt. An der Scrollbar sind Zahlen statt Pfeile und der Fenstertitel oben ist durchsichtig. Da muss irgendwas grundlegend schief laufen 😕



  • ja das liegt wie schon gesagt daran, daß du die GDI sachen ned korrekt freigibst. da ist klar daß dann sowas bei rauskommt.



  • MasterCounter wo gibst du den "solid brush" frei?



  • hab ich jetzt freigegeben ändert aber nix... hab jetzt folgenden abgeänderten code:

    case ID_TIMER:
    				{					
    				HBRUSH hClear;
    				HBITMAP hBmp;
    
    				hdc=GetDC(hWnd);
    				backbuffer=CreateCompatibleDC(hdc);		
    
    				hBmp=CreateCompatibleBitmap(backbuffer,WNDWIDTH,WNDHEIGHT);
    				hClear=CreateSolidBrush(RGB(255,255,255));
    
    				SelectObject(backbuffer,hBmp);				
    				FillRect(backbuffer,drawrec,hClear);
    
    				DrawCoordSys(backbuffer,verschiebung);	
    
    				MoveToEx(backbuffer,...,NULL);				
    					LineTo(backbuffer,...);
    
     				BitBlt(hdc,deleterc->left,deleterc->top,deleterc->right,deleterc->bottom,backbuffer,deleterc->left,deleterc->top,SRCCOPY);	
    
    				DeleteObject(hBmp);
    				DeleteObject(hClear);
    				ReleaseDC(hWnd,backbuffer);
    				ReleaseDC(hWnd,hdc);
    				break;
    				}
    

    Nur jetzt hab ich das Problem, dass der Buffer nicht auf das FillRect reagiert, egal welchen Wert ich einstelle das Fenster wird nun komplett mit schwarz übermalt... Irgendwas veraff ich hier grade richtig Freunde der Nacht -.-



  • @MasterCounter
    Die Funktionen ineinander zu verschachteln, bringt dir hier wie schon erwähnt Speicherprobleme.
    1. Löschen des Brush-Objekts fehlt
    2. Ein Create(Compatible)DC erfordert ein DeleteDC und kein ReleaseDC

    HBITMAP hbmp, hbmpold;
    HDC hdc, backbuffer;
    HBRUSH hbrush;
    
    hdc=GetDC(hWnd);
    backbuffer=CreateCompatibleDC(hdc);
    hbmp = CreateCompatibleBitmap(backbuffer, WNDWIDTH, WNDHEIGHT);
    hbmpold = (HBITMAP)SelectObject(backbuffer, hbmp);
    hbrush = CreateSolidBrush(RGB(255, 255, 255));
    
    FillRect(backbuffer, drawrec, hbrush);
    
    //zeichnen
    
    BitBlt(hdc,deleterc->left,deleterc->top,deleterc->right,deleterc->bottom,backbuffer,deleterc->left,deleterc->top,SRCCOPY);
    
    // Freigabe der Objekte
    DeleteObject(hbrush);
    SelectObject(backbuffer, hbmpold);
    DeleteObject(hbmp);
    DeleteDC(backbuffer);
    ReleaseDC(hWnd, hdc);
    
    InvalidateRect(hWnd,drawrec,FALSE);
    


  • läuft 🤡 Ich krieg die krise... Tausend Dank an dich! 👍 Aber ein Gutes hat die Sache ja, ich vergess die Sache mit Release usw. nie nie mehr 😃



  • erledigt


Anmelden zum Antworten