Scintillement et HDC

DormeurDev Messages postés 61 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 20 avril 2006 - 19 sept. 2005 à 17:16
DormeurDev Messages postés 61 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 20 avril 2006 - 19 sept. 2005 à 20:19
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

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

et plein d'autres dans les sources.

ciao...
BruNews, MVP VC++
0
DormeurDev Messages postés 61 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 20 avril 2006 1
19 sept. 2005 à 17:55
Ok merci, je vais voir ça !
0
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
19 sept. 2005 à 18:59
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);
0
DormeurDev Messages postés 61 Date d'inscription samedi 5 février 2005 Statut Membre Dernière intervention 20 avril 2006 1
19 sept. 2005 à 20:19
Je testerai quand je pourrai, merci aussi.
0
Rejoignez-nous