Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : scintillement et HDC [ Archives / API ] (DormeurDev)

lundi 19 septembre 2005 à 17:16:45 | scintillement et HDC

DormeurDev

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


lundi 19 septembre 2005 à 17:28:55 | Re : scintillement et HDC

BruNews

Administrateur CodeS-SourceS
exemple ici
ABOUTBOX SINUSOIDE (WIN32)
http://www.cppfrance.com/code.aspx?id=10630

et plein d'autres dans les sources.

ciao...
BruNews, MVP VC++

lundi 19 septembre 2005 à 17:55:19 | Re : scintillement et HDC

DormeurDev

Ok merci, je vais voir ça !


lundi 19 septembre 2005 à 18:59:34 | Re : scintillement et HDC

SnOOpss

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);


lundi 19 septembre 2005 à 20:19:14 | Re : scintillement et HDC

DormeurDev

Je testerai quand je pourrai, merci aussi.

jeudi 22 septembre 2005 à 19:22:50 | Re : scintillement et HDC

rt15

Membre Club
Désolé DormeurDev, c'est une question, mais j'espère que la réponse t'intéresseras.

Quelqu'un sait comment faire pour accélérer BitBlt ? A ce qui paraît, les bitmaps sont composés d'un tableau avec une valeur par pixel ainsi que d'une palette. Il existerait en plus une palette système, et windows serait fréquement obligé de rechercher la couleur la plus proche d'une autre. J'en conclus qu'il y a surement moyen de bien préparer les HDC de tampons et d'affichage ainsi que les bitmaps destinées à être dessinées sur le tampon (API RealizePalette).

Petit détail sur l'affichage dans un hdc: Ces contextes ont généralement un propriété autoredraw. BitBlt provoque des sintillement en fonction de la valeur de cette propriété.

Sinon, voici un jeu basé sur ton principe:
http://vbfrance.com/code.aspx?ID=32268

Le source des dlls est trouvable sur Delphifr.com.



Cette discussion est classé dans : hdc, scintillement


Répondre à ce message

Sujets en rapport avec ce message

Redessiner le Bureau [ par ZoB ] SalutDans un prog j'affiche le papierpeint sur l'ecran a l'aide de : HDC hdc = CreateDC("DISPLAY",0,0,0); PaintDesktop(hdc);Quand je quitte l'applica Redessiner le Bureau [ par ZoB ] SalutDans un prog j'affiche le papierpeint sur l'ecran a l'aide de : HDC hdc = CreateDC("DISPLAY",0,0,0); PaintDesktop(hdc);Quand je quitte l'applica Probleme de HDC [ par Crystalin ] Je cherche a mettre le HDC du desktop de windows ou d'un programme deja lancer ... je travaille sous VC++ et je ne fait pas un MFC ...Je pensé que : G Probleme de HDC [ par Crystalin ] Je cherche a mettre le HDC du desktop de windows ou d'un programme deja lancer ... je travaille sous VC++ et je ne fait pas un MFC ...Mon but c de rem probleme offscreen en GDI [ par pipo ] j'ai un soucis en GDI :ce que je veux, c'est de travailler sur une zone offscreen pour y animer/coller tout mon graphisme, puis de coller cette zone s GDI : probleme de splitting en offscreen [ par pipo ] j'ai un soucis en GDI :ce que je veux, c'est de travailler sur une zone offscreen pour y animer/coller tout mon graphisme, puis de coller cette zone s SetTextColor(HDC,COLORREF); [ par Xs ] salut !j'ai un probleme avec cette fonction que j'ai rencontré par hasard : elle ne marche pas. Je la compile correctement mais il ny'a a aucun effet imprimer une boite de dialogue en vc++ [ par f1cobra ] J'ai un probleme d'assertion en essayant d'imprimer une boite de dialogue Code: void CDialogueReservation::OnFilePrint() { // TODO: Add your command h Utilisation concrete de setbkcolor [ par dread ] J'ai mis le code suivant dans WM_INITDIALOG: HDC hdc; COLORREF color; color = RGB(12,12,12); hdc = GetDC(hwnd); SetBkColor(hdc,co Device context et StretchBlt ? [ par tavernier ] Bonjour, je suis en train de faire un générateur de fractale et j'ai besoin de mettre la fractale de coté pour ne pas avoir à tout recalculer pour la


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,156 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.