Double buffer win32

Résolu
Stepharcher
Messages postés
117
Date d'inscription
samedi 12 avril 2003
Statut
Membre
Dernière intervention
8 septembre 2008
- 12 août 2006 à 13:16
Stepharcher
Messages postés
117
Date d'inscription
samedi 12 avril 2003
Statut
Membre
Dernière intervention
8 septembre 2008
- 12 août 2006 à 15:07
Bonjour à tous !

J'ai récemment tenté le double buffer sous window avec GDI... Mais je ne comprend pas trop mon erreur. Quand je dessine directement sur mon DC, ça marche. Quand je crée un compatible DC, que je dessine tout dessus et que je plaque mon compatible DC sur mon DC... bah ça marche plus ^_^
Mon code ressemble à peu près à ça :

hwnd = CreateWindow(...);
hdc = GetDC(hwnd);
compDC = CreateCompatibleDC(hdc);

// Je dessine tout dans mon compDC, genre un rectangle ou une image
// Ensuite je place mon compDC dans mon DC
BitBlt(hdc, 0, 0, width, height, compDC, 0, 0, SRCCOPY);

Mais je comprend pas où est mon erreur... Est-ce que ça serait sur ma manière de dessiner ? Si c'est le cas alors pourquoi ça marche quand j'essaye directement sur mon hdc ?
Si quelqu'un pouvait me renseigner sur le problème ça serait sympa :)

Merci d'avance !

[}:)] Stéph [}:)]

4 réponses

vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
12 août 2006 à 15:04
Non non tu as juste à selectionner la bitmap dedans. Après tu dessines dans compDC comme si c'était un DC normal. En fait tu ajoutes juste ces deux lignes et ca devrait marcher
HBITMAP hbmp = CreateCompatibleBitmap(hdc, width, height);
SelectObject(compDC, hbmp);

Et ne pas oublier
DeleteObject(hbmp); à la fin

_____________________________________
Un éditeur de ressources gratuit pour Windows
3
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
12 août 2006 à 13:20
Pour un DC mémoire, tu dois seléctionner une bitmap dedans:

hwnd = CreateWindow(...);
hdc = GetDC(hwnd);
compDC = CreateCompatibleDC(hdc);
HBITMAP hbmp = CreateCompatibleBitmap(hdc, width, height);
SelectObject(compDC, hbmp);

// Je dessine tout dans mon compDC, genre un rectangle ou une image
// Ensuite je place mon compDC dans mon DC
BitBlt(hdc, 0, 0, width, height, compDC, 0, 0, SRCCOPY);

_____________________________________
Un éditeur de ressources gratuit pour Windows
0
Stepharcher
Messages postés
117
Date d'inscription
samedi 12 avril 2003
Statut
Membre
Dernière intervention
8 septembre 2008

12 août 2006 à 15:01
Oki donc si je veux dessiner un rectangle avec la fonction rectangle, il faut que je me débrouille pour en faire un bitmap puis que je le place dans mon DC mémoire. Merci j'vais essayer ^_^

[}:)] Stéph [}:)]
0
Stepharcher
Messages postés
117
Date d'inscription
samedi 12 avril 2003
Statut
Membre
Dernière intervention
8 septembre 2008

12 août 2006 à 15:07
Merci ça marche très bien !

[}:)] Stéph [}:)]
0