[MDI] schnelles Zeichnen in ChildWindow

basd

Erfahrenes Mitglied
Hallo,

habe eine Frage:
Kennt einer eine Möglichkeit schnell in ein MDI Fenster zu Zeichnen ?
Also ich will jeden Pixel einzeln setzen !

Nachdem ich mit Freuden festgestellt habe, dass die SetPixel(V) Routine sehr langsam sind hab ich mich auf die Suche gemacht und bin auf ein paar Artikel mit bitmaps gestoßen. Dort kann ich dann auch direkt ein von mir beschriebenen Speicherbereich einem Bitmap zuweisen und diesen dann auf den Bildschirm bliten. Das funktioniert alles auch sehr gut (im Vergleich mit dem Sekunden dauernden SetPixel), nur je größer das Fenster ist desto langsamer wird es. (Ich habe Pixel zeilen die von oben nach unten Scrollen). Gibt es eine Möglichkeit wie in SDL das Display Surface zu LOCKEN in den Speicher schreiben und anschließend wieder freigeben ?
Muss man DirectDraw verwenden ? Wo gibt es ein brauchbares Tutorial (mit google hab ich nix anständdiges gefunden) ?

Danke !
 

Daniel Toplak

Erfahrenes Mitglied
Also wie du schon angedeutet hast, kann man das "Bild" vorher im Speicher zeichnen und dann blitten.
Da ich leider nicht ganz weiß wie du das machst kann ich dir auch nicht näher helfen.
Aber schau dir mal die Funktion CreateCompatibleDC() an, damit kannst du dir einen Device Context im Speicher erstellen, in diesen kannst du dann reinzeichnen und dann über einen BitBlit auf den Device Context des jeweiligen Fensters blitten, das ist in der Regel eigentlich ziemlich flott.

Wenn du dazu mehr Hilfe benötigst, dann meld dich nochmal.

Gruß Homer
 

basd

Erfahrenes Mitglied
Also ich benutzte CreateCompatibleDC ( schon um den Flackern zu umgehen).
In das Bitmap dieses DCs setze ich die Bits direkt (SetbitmapBits).
Also das setzen der Bits geht scheinbar schnell genug denn wenn das Fenster klein ist bzw. teils bedeckt ist geht das Zeichnen flott genug aber sobald das (sichtbare) Bild auf ca. 1/4 Bildschirmgröße wird das ewig lahm.
Hoffe damit ist das Probelm besser beschrieben .

Wie machen die das bei den Videoplayern ? einer Beispielcode