Problem nach 4960 maliger Fensterverformung

gerd87

Erfahrenes Mitglied
Hallo,

ich habe eine funktion, wie ich die form des Fensters ändere.
Die Funktion wird immer aufgerufen, wenn sich die Form ändern soll.

Das Klappt auch, aber wenn man die Funktion 4960 mal aufgerufen hat, Funktioniert das nicht mehr, und das Fenster sieht so aus, als ob die Funktion nicht da wäre, also ohne verformung.

Hier die Funktion:
Code:
void verformung (int p1, int p2, int p3, int p4, int a1, int a2, int a3, int a4, int e1, int e2, int e3, int e4){

  HRGN PHandle=CreateRectRgn(p1, p2, p3, p4);
  HRGN AHandle=CreateRectRgn(a1, a2, a3, a4);
  HRGN EHandle=CreateRectRgn(e1, e2, e3, e4);
  HDC hdc=GetDC(Form1->Handle);

  CombineRgn(EHandle,EHandle,PHandle,RGN_OR);
  CombineRgn(EHandle,EHandle,AHandle,RGN_OR);
  SetWindowRgn(Form1->Handle,EHandle,true);
  ReleaseDC(Form1->Handle,hdc);

}

Hat jemand eine Idee, woran das liegen könnte?
 
Du gibst zwei der 3 Regions nicht mehr frei.Bei CombineRgn werden zwei Regions zusammengepappt, du übergibst eine der beiden als Ziel, das ist ok. Die andere Region bleibt aber weiterhin im Speicher. Die musst du freigeben.

Die eine Region, die du an SetWindowRgn übergibst, übergibst du an Windows, diese nicht freigeben.

Dir fehlt also:

DeleteObject( AHandle );
DeleteObject( PHandle );

Den HDC kannst du dir auch sparen, du machst ja nichts damit (gibst ihn allerdings sauber frei).
 
Zurück