begin process at 2012 05 30 17:05:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

scintillement et HDC


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

scintillement et HDC

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 Administrateur CodeS-SourceS
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ée 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...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,187 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales