Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: FAQ - WinAPI ::  Double-Buffering (was: BackBuffer)     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
crass_
Unregistrierter




Beitrag crass_ Unregistrierter 11:02:00 16.09.2002   Titel:   Double-Buffering (was: BackBuffer)            Zitieren

Hi, ich möchte eine Animation mit GDI machen. Damit das Bild aber nicht "flackert" muß man irgednwie erst mal die ganze Grafik in einen Backbuffer malen und dann den BackBuffer in den Vordergrund holen. Weiß jemand wie das mit GDI geht?

cu crass

edit: Topic mit Suchwörtern verfeinert.


Zuletzt bearbeitet von Christoph am 23:09:16 11.08.2004, insgesamt 1-mal bearbeitet
Werbeunterbrechung
Christoph
Moderator

Benutzerprofil
Anmeldungsdatum: 30.04.2001
Beiträge: 5704
Beitrag Christoph Moderator 13:25:00 16.09.2002   Titel:              Zitieren

So:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
HDC hDC = ...; // z.B. mit BeginPaint
HDC hDC2 = CreateCompatibleDC(hDC);
HBITMAP hBM = CreateCompatibleBitmap(hDC, cxClient, cyClient);
SelectObject(hDC2, hBM);

// Zeichenoperationen auf hDC2...

BitBlt(hDC, 0, 0, cxClient, cyClient, hDC2, 0, 0, SRCCOPY);
// Ein SelectObject(OldBitmap); ist imho nicht nötig
DeleteObject(hBM);
DeleteDC(hDC2);
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
HDC hDC = ...; // z.B. mit BeginPaint
HDC hDC2 = CreateCompatibleDC(hDC);
HBITMAP hBM = CreateCompatibleBitmap(hDC, cxClient, cyClient);
SelectObject(hDC2, hBM);

// Zeichenoperationen auf hDC2...

BitBlt(hDC, 0, 0, cxClient, cyClient, hDC2, 0, 0, SRCCOPY);
// Ein SelectObject(OldBitmap); ist imho nicht nötig
DeleteObject(hBM);
DeleteDC(hDC2);
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
HDC hDC = ...; // z.B. mit BeginPaint
HDC hDC2 = CreateCompatibleDC(hDC);
HBITMAP hBM = CreateCompatibleBitmap(hDC, cxClient, cyClient);
SelectObject(hDC2, hBM);

// Zeichenoperationen auf hDC2...

BitBlt(hDC, 0, 0, cxClient, cyClient, hDC2, 0, 0, SRCCOPY);
// Ein SelectObject(OldBitmap); ist imho nicht nötig
DeleteObject(hBM);
DeleteDC(hDC2);


Edit: Parameter von BitBlt berichtigt. :)

[ Dieser Beitrag wurde am 16.09.2002 um 18:12 Uhr von cd9000 editiert. ]

edit: Vertipper berichtigt.

_________________
Wenn Word für Längeres geeignet wäre, würde es nicht Word, sondern Sentence, Page oder Article heißen.


Zuletzt bearbeitet von Christoph am 23:05:45 11.08.2004, insgesamt 1-mal bearbeitet
crass
Unregistrierter




Beitrag crass Unregistrierter 14:57:00 16.09.2002   Titel:              Zitieren

thanx, funktioniert! :)
Mischu
Unregistrierter




Beitrag Mischu Unregistrierter 19:45:23 02.03.2004   Titel:              Zitieren

Hallo,
ich habe deinen Code auch mal umgesetzt, bin aber auf eine Stelle gestoßen die ich nicht lösen konnte.

Zeichnet man jedes "Objekt" erst auf die hDC2 und zeigt es dann an ist alles wunderbar.
Nehmen wir aber an, dass man einen Teil direkt auf hDC und einen anderen Teil auf hDC2 zeichnet, so wird der alte hDC Inhalt übermalt.

Meine Frage also:

Wie bzw. kann man ein Hbitmap transparent machen ???

danke
Mischu
flenders
Moderator

Benutzerprofil
Anmeldungsdatum: 04.07.2002
Beiträge: 9235
Beitrag flenders Moderator 19:51:12 02.03.2004   Titel:              Zitieren

Dann müsstest du wohl anstelle von BitBlt TransparentBlt verwenden - aber den Sinn davon verstehe ich nicht so ganz :rolleyes:

_________________
( Moderator im Webzeugs- und WinAPI-Forum )
geeky
Mitglied

Benutzerprofil
Anmeldungsdatum: 04.05.2001
Beiträge: 6031
Beitrag geeky Mitglied 20:01:18 02.03.2004   Titel:              Zitieren

Zitat:
Nehmen wir aber an, dass man einen Teil direkt auf hDC und einen anderen Teil auf hDC2 zeichnet, so wird der alte hDC Inhalt übermalt.

Das ergibt keinen Sinn, warum sollte man das tun wollen ? - Dadurch zerstörst du dir ja wieder den Backbuffer-Vorteil...
Christoph
Moderator

Benutzerprofil
Anmeldungsdatum: 30.04.2001
Beiträge: 5704
Beitrag Christoph Moderator 22:15:13 02.03.2004   Titel:              Zitieren

Zitat:
Montag, 16.09.2002

Zitat:
Dienstag, 02.03.2004

omg :eek:

_________________
Wenn Word für Längeres geeignet wäre, würde es nicht Word, sondern Sentence, Page oder Article heißen.
flenders
Moderator

Benutzerprofil
Anmeldungsdatum: 04.07.2002
Beiträge: 9235
Beitrag flenders Moderator 22:49:27 02.03.2004   Titel:              Zitieren

Ich hatte hier darauf verlinkt - aber eigentlich hätte er ruhig dort weiterposten können...

_________________
( Moderator im Webzeugs- und WinAPI-Forum )
C/C++ Forum :: FAQ - WinAPI ::  Double-Buffering (was: BackBuffer)   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.