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 13
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 13
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