GDI Grafikfehler ... brauche hilfe
-
hallo
ich wollte nur mal wissen wie man das flackern weg bekommt, das entsteht wenn ich das fenster größer mache, kleiner mache oder sonst was in die richtung. Es ist nämlich so, dass ich etwas per GDI ins fenster zeichne und das soll dann auch immer so gezeichnet werden. also hab ich ne funktion die das für mich zeichnet und die wird dann eben immer bei WM_ERASEBKGND ausgeführt. aber dass flackert immer so bei größer und kleiner machen, oder wenn ich das fenster auseinander ziehe.
was mich zum zweiten problem führt:
wenn ich meine anwendung ein paar mal auf den bildschirm hin und her geschoben habe, überzeichnet die anwendung aufeinmal einfach alles. sie überzeichnet andere anwendungen und so weiter ... sogar den desktop...
wenn ich sie dann wieder schließe haben alle popupmenüs irgendwie ein fehler bei der darstellung. komisch ist das schon und das liegt nicht an meinem windows, denn bei anderen computern klapts auch nich so wie sollte, da sind dann die gleiche fehler. alle menüs haben dann einen schwarzen hintergrund und wenn ich dann auf die einzelnen menuitems gehe haben wenigstens die ihre graue farbe wieder. - aber auch nur bis ich das menu wieder aufrufe ...ist das vielleicht so ne art buffer overflow der GDI?
...keine ahnungbitte helft mir
danke...
-
Wenn sich andere Programme nicht mehr zeichnen können, dann hast du vermutlich irgendeine Ressourcenschlamperei betrieben - im Task Manager kannst du dir anzeigen lassen, wie viele GDI Handles ein Programm verbraucht.
-
Wegen dem Flimmern: Stichwort - DoubleBuffer, zeichnest alles in ein Bitmap im Speicher und malst damit dein ganzes Fenster in einem Rutsch aus. WM_ERASEBKGND kann dann einfach 0 zurückgeben, damit die StdProc nicht den Hintergrund einfärbt, der sowieso von deinem Bitmap übermalt wird.
Wenn du dein GDL-Leak nicht findest, kannst du auch den entsprechenden Code posten, die sind aber eigentlich einfach zu entdecken.
-
wie geht das mit den resourcen?
ich hab mich an das msdn gehalten ....
und was kann das verursachen? was muss ich machen damit das aufhört?
ich hab doch nur ein menu und ein paar dialoge. sonst nix.und wie funktioniert das mit dem double buffer?
kann mir da jemand ein kleines beispiel geben?danke schon im voraus ...
-
http://www.c-plusplus.net/forum/viewtopic.php?t=14713&sid=7ac2cc3237f1e66bebf9054c5aedf89e
______________Hä, es flackert, obwohl du nur ein paar Menues und Dialoge hast? Sind das zwei verschiedene Programme?
-
nö, das is nur ein programm.
das eben durch menü oder dialogbefehle zeichnet...... danke für den link
-
Das mit den Anzeigefehlern kommt auf jeden Fall von deinen Zeichenaktionen. Ich hatte das auch schon mal, dass die Menüs schwarz geworden sind. Da erstellst du bei jedem mal Zeichnen neue Objecte, ohne das die alten gelöscht werden, oder du setzte dinge in einen DC ein ohne sie wieder herauszunehmen, oder du forderst immer wieder neue DCs an, ohne die alten zurückzugeben. Bei sowas kommt Windows durcheinander. Achte am besten immer drauf, dass du einen DC genauso zurückgibst, wie du ihn bekommen hast. SelectObject liefert immer das Handle des Objects zurück, das durch dein Object ersetzt wurde. Zum Schluß musst du dann immer das Object wieder einsetzte, das beim ersten SelectObject zurückgegeben wurde (für jeden Typ (HPEN, HBRUSH,...) natürlich).
Wenn du in WM_PAINT nicht allzuviel Code hast, dann poste ihn mal.
-
danke für den hinweis, ich wusste nicht das es wieder so zurück gegeben werden musste.
code kann ich leider nicht posten, denn es ist ein projekt, und meine Mitprogrammierer weigern sich da nu was "zu veröffentlichen" ... ******* ... aber naja
danke trotzdem ...