UpdateWindow Fehler
-
Das blose Ansehen Deines Codes sagt mir, dass Du GDI Leaks ohne Ende ereugst.
Du erzeugst Objekte, die nicht entsorgt werden.
Du selektierst Objekte, die nicht wieder aus dem Kontext entfernst...Evtl. Sorgen die Leaks schon dafür, dassnichts gezeichnet wird.
Außerdem. Woher weißt Du dass UpdateWindow nicht funktioniert?
-
ich würde bei case WM_CREATE: und case WM_COMMAND: mal noch einen break einbauen, und vielleicht hilft ja auch ein InvalidateRect vor dem UpdateWindow
-
Martin Richter schrieb:
Du erzeugst Objekte, die nicht entsorgt werden.
Du selektierst Objekte, die nicht wieder aus dem Kontext entfernst...Können Sie mir denn erklären wir man dies tut?
-
DeleteObject()
Und dann solltest Du mal schauen was die Funktionen so zurückgeben...
-
-lowbyte- schrieb:
DeleteObject()
Und dann solltest Du mal schauen was die Funktionen so zurückgeben...
Und wo baue ich das am klügsten ein, denn damit lösche ich dann doch die Objkete tatsächlich?!
-
Also ehrlich gesagt habe ich keine Lust Dir jetzt den richtigen Aufbau von GUI's zu erklären. Vielleicht hat Martin ja mehr Zeit und Lust.
-
Dan wenigstens wo ich Nachlesen kann?
-
Ich hab das früher zu meinen winapi-Zeiten immer so aufgebaut:
// (1) Objekt erstellen: /////////////////////////////////////////////////////////// HPEN aPen=CreatePen (PS_SOLID, 2, RGB (255, 0,0)); // (2) Objekt verwenden: /////////////////////////////////////////////////////////// // (a) Pen selektieren: HGDIOBJ oldPen=SelectObject(hdc,aPen); // (b) Mit aPen rumzeichnen... // (c) Pen wieder de-selektieren, indem man das vorherige Objekt wieder hinein-selektiert (Rückgabewert wäre nun aPen) SelectObject(hdc,oldPen); // (3) Objekt löschen: /////////////////////////////////////////////////////////// DeleteObject(aPen);
-
Robert96 schrieb:
Dan wenigstens wo ich Nachlesen kann?
Z.B. hier http://msdn.microsoft.com/en-us/library/dd162759.aspx
-
RTFM (Read the fine MSDN)
Zu (fast) jedem Create... gehört ein Destroy.../Delete...
Hier CreatePen -> DeleteObject.Wenn man in einen DC ein Objekt selektiert (SelectObject), dann sollte man das alte Objekt merken und vor Ende der Nutzung des DCs wieder selektieren
HGDIOBJ hOld = SelectObject(...)); ... SelectObject(hOld);