Problem beim Zeichnen mit GDI
-
Hallo !
Ich habe ein fettes Problem beim Zeichen mit GDI.
Ich habe mir von einem Beispielprogramm ausgehend ein Analyzer für Audio gebastelt mit den wave- Funktionen z.B. waveInAddBuffer()...
Jetzt versuche ich das ganze auch darzustellen mit GDI.
Wenn ich das Programm jetzt im Visual Studio laufen habe funktioniert die Funktion einwandfrei aber wenn ich das Programm jetzt alleine starte einfach aus einem Ordner heraus dann zeichnet der nach einer Zeit einfach nicht mehr. Die Balken bleiben dann einfach an der obersten stelle stehen. Das kapiere ich nicht.hier mal der Code:
case WM_ANALYZERDATA: { double *d=(double*)wParam; HDC hDC =GetDC(g_hWnd); HBRUSH hFGr=CreateSolidBrush(RGB(180,226,255)); HBRUSH Backgr=CreateSolidBrush(RGB(0,0,0)); RECT rc; int x1=250; int x2=253; for(int i=0;i<100;i++) { rc.left=x1; rc.top =100; rc.right=x2; rc.bottom=400; FillRect(hDC,&rc,Backgr); rc.left=x1; rc.top =400-(int)(d[i]/10); rc.right=x2; rc.bottom=400; Rectangle(hDC,rc.left,rc.top,rc.right,rc.bottom); FillRect(hDC,&rc,hFGr); x1=x2+1; x2+=4; } DeleteObject(hFGr); DeleteObject(Backgr); ReleaseDC(g_hWnd,hDC); return 0; }
-
Du mußt den HDC auch freigeben (so wie die beiden Brushes)...
-
Wie freigeben ?? Ich habe doch ReleaseDC() gemacht.
-
Ach Gott, das hab ich in der Eile ganz übersehen, sorry...
-
Siehst du im Taskmanager irgendwelche Auffälligkeiten, wie z.B. steigender Speicherbedarf oder steigende Anzahl an GDI-Objekten?!
-
Verfügbarer Speicher, Handles, Threads, Prozesse schwanken zwar ein wenig aber meiner Meinung nach ist da nichts Auffälliges.
Das Komische ist auch: ich habe zwei Versionen von dem ganzen Programm gemacht die erste vorläufige funktioniert wunderbar aber jetzt die letzte Finalversion macht die Probleme und ich habe alles 1:1 übernommen !
-
Ich habe jetzt doch gesehen das die Zahl der GDI- Objekte ganz rapide ansteigt.
Was ist denn da los ??
-
Was ist denn da los ??
Ein Speicher Loch, irgendwo fehlt ein DeleteObject, wo kann ich dir auch nicht sagen.