Scintillement et HDC

Signaler
Messages postés
61
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
20 avril 2006
-
Messages postés
61
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
20 avril 2006
-
Pour éviter le scintillement dû au rafraîchissement dans des
appliqcation graphique on utilise un buffer pour dessiner avant
d'afficher.



Comment mettre en place ce mécanisme dans une application fenêtrée avec l'API windows normale ?



Par exemple en ayant deux DC et en dessinant dans un contexte
périphérique puis en l'affichant après puis en changeant. Un peu comme
avec les backbuffer dans directx.



(et oui je sais qu'on est pas obligé de rafraichir toute la fenêntre mais juste ce qu'il faut en général )



Merci

4 réponses

Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
exemple ici
ABOUTBOX SINUSOIDE (WIN32)
http://www.cppfrance.com/code.aspx?id=10630

et plein d'autres dans les sources.

ciao...
BruNews, MVP VC++
Messages postés
61
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
20 avril 2006
1
Ok merci, je vais voir ça !
Messages postés
571
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
5 décembre 2013

Sinon un exemple de double buffer !!



hdc etant le HDC actuel



RECT ClientRect

GetClientRect(hwnd ,&ClientRect);



// création d'un contexte d'affichage en mémoire et d'un bitmap associé

HDC hMemDC= CreateCompatibleDC(hdc);

HBITMAP hMemBmp= CreateCompatibleBitmap(hdc, ClientRect.right-ClientRect.left,ClientRect.bottom-ClientRect.top);

HBITMAP hOldBmp= (HBITMAP)SelectObject(hMemDC, hMemBmp);



[....]

ton code fait avec hMemDC

[....]



// recopie du contexte en mémoire à l'écran

BitBlt(hdc, 0, 0, ClientRect.right-ClientRect.left,ClientRect.bottom-ClientRect.top, hMemDC, 0, 0, SRCCOPY);

// sélection anciens objets, destruction de ceus créés

SelectObject(hMemDC, hOldBmp);

DeleteObject(hMemBmp);

DeleteDC(hMemDC);
Messages postés
61
Date d'inscription
samedi 5 février 2005
Statut
Membre
Dernière intervention
20 avril 2006
1
Je testerai quand je pourrai, merci aussi.