Gerätekontext außerhalb von WM_PAINT erstellen??



  • Hallo,

    mein kleines Progrämmchen (das mit dem Ball den man werfen kann) hab ich jetzt etwas erweitert.
    Ich hab noch eine Maske für den Ball eingebunden, und Blitte mit der technik wie Petzold es mit dem Foto von seinem Neffen gemacht hat zuerst in ein MemoryDC, und zu guter letzt die gesamte MemoryMap in den hdc des Fensters.

    Funktioniert eigentlich auch ganz gut außer das ich die Memorybitmap nach Beginpaint() immerwieder mit CreateCompatibleBitmap erstelle und sie vor EndPaint wieder freigebe.

    Zieht man das Fenster groß auf, oder Maximiert es ist ein deutlicher Performanceverlust zu sehen.

    Ich hab versucht die Kontexte (was für ein blödes Wort!) bei WM_CREATE zu erstellen und bei WM_DESTROY wieder freizugeben, mit dem Ergebnis das nichts mehr geblittet wird.

    BeginPaint und EndPaint müßen demnach wohl innerhalb von WM_PAINT benutzt werden??

    Wenn ich die MemoryBitmap nicht bei WM_PAINT sondern bei WM_CREATE mit CreateBitmap erstelle wie stell ich dann sicher das sie zu meinem hdc kompatible ist? (muß ich das überhaupt?)



  • Einen Gerätekontext eines Fensters erhälst du mit

    // DC vom Fenster holen
    HDC hdc = GetDC( hWnd );
    
    //
    // Hier dann irgendwas mit dem Context machen
    //
    
    // DC wieder freigeben um Ressouecenleaks zu vermeiden.
    ReleaseDC( hWnd, hdc );
    

    Diese Methode kannst du verwenden, solange du ein gültiges Fensterhandle ( also z.B. in WM_CREATE ) hast.



  • Jo, Danke!

    Allerdings hab ich grad gemerkt das die Performance genause schlecht ist.
    Schätze es wird am Blit der MemoryMap in den hdc liegen.



  • Hab den Code jetzt dahingehend geändert daß nur noch der Bereich in dem der
    Ball liegt aus der MemoryMap geblitet wird.

    Jetzt läufts wieder schnell!


Anmelden zum Antworten