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 : Double buffering sur une CDialog (dessin sous MFC) [ Archives / Graphique ] (jul39dole)

dimanche 8 janvier 2006 à 13:44:07 | Double buffering sur une CDialog (dessin sous MFC)

jul39dole

Bonjour, je dois dessiner sur une boite de dialogue modale en MFC. Pour résoudre le problème de "scintillement", j'ai appliqué le double buffering. Seulement, cela ne marche pas...et je ne vois pas où se situe le problème. Voici mon code :

void CDialogPlacement::OnPaint()
{
 CPaintDC fdc(this); // device context for painting
 //mise en place du double-buffering
 CDC dc;
 dc.CreateCompatibleDC(&fdc);
//on y ajoute un bitmap pour agrandir dc
 CBitmap memBmp;
 memBmp.CreateCompatibleBitmap(&fdc, 200, 200);
 CBitmap* OldBmp = dc.SelectObject(&memBmp);

//operation de dessin sur dc
 CPen aPen, *oldPen;
 CBrush *oldBrush;
 aPen.CreatePen(PS_SOLID,1,RGB(0,0,0));
 oldPen=dc.SelectObject(&aPen);
 oldBrush=static_cast<CBrush*>(dc.SelectStockObject(WHITE_BRUSH));
 dc.Rectangle(0,0,200,20);
 dc.SelectObject(oldPen);
 dc.SelectObject(oldBrush);

  //on bascule dc vers fdc
 fdc.BitBlt(0,0,401+DEC_X,401+DEC_Y,&dc,0,0,SRCCOPY);
 dc.SelectObject(OldBmp);
 dc.DeleteDC();
 memBmp.DeleteObject();
 // Do not call CDialog::OnPaint() for painting messages
}


lundi 9 janvier 2006 à 10:49:38 | Re : Double buffering sur une CDialog (dessin sous MFC)

CoyoteVsBeepBeep

Membre Club

hello,
j'ai modifié 2 trucs sur ton code et ca marche:

deja je travaille pas dans la fonction OnPaint mais je crée un timer pour déssiner a intervalle régulier (regarde le dernier commentaire de ton source: // Do not call CDialog::OnPaint() for painting messages) et je fais:

CDC *pDC;
 
 pDC=GetDC();
 
 //mise en place du double-buffering
 CDC dc;
 dc.CreateCompatibleDC(pDC);

//on y ajoute un bitmap pour agrandir dc
 CBitmap memBmp;
 memBmp.CreateCompatibleBitmap(pDC, 200, 200);
 CBitmap* OldBmp = dc.SelectObject(&memBmp);

//operation de dessin sur dc
 CPen aPen, *oldPen;
 CBrush *oldBrush;
 aPen.CreatePen(PS_SOLID,1,RGB(0,0,0));
 oldPen=dc.SelectObject(&aPen);
 oldBrush=static_cast<CBrush*>(dc.SelectStockObject(WHITE_BRUSH));
 dc.Rectangle(0,0,200,20);
 dc.SelectObject(oldPen);
 dc.SelectObject(oldBrush);

  //on bascule dc vers fdc
 //fdc.BitBlt(0,0,401+DEC_X,401+DEC_Y,&dc,0,0,SRCCOPY);
 pDC->BitBlt(0,0,200,200,&dc,0,0,SRCCOPY);
 dc.SelectObject(OldBmp);
 dc.DeleteDC();
 memBmp.DeleteObject();
 
ReleaseDC(pDC);

A+




Cette discussion est classé dans : double, dc, buffering, selectobject, fdc


Répondre à ce message

Sujets en rapport avec ce message

Double Buffering [ par garslouche ] Salut !Je voudraid faire du double buffering mais même un truc simple ne fonctinne pas :HDC hDC = CreateCompatibleDC(hDestDC);MoveToEx(hDC,0,0,NULL);L double buffering [ par Ombitious_Developper ] Salut Tous : Comment faire du double Buffering avec Win32 ou MFC? Problème affichage Double buffering [ par _Jonathan ] Bonjour,Dans une fenetre windows, je crée un objet nommé graphique a l'aide de WNDCLASS (CreateWindow(..."graphique"...)). Dans cette zone, je dessine Double buffer win32 [ par Stepharcher ] 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 su Une histoire de Double Buffering [ par equimose ] --//Equimose//--salut à tous !je souhaite savoir programmer un double buffering pour mon appli !Mon appli pour faire simple dessine des objets a l'ecr OpenGL : double ou float ? [ par eplanet ] Bonjour à tous, je fais un petit programme en OpenGL manipulant de nombreux triangles, et je stocke toutes les données (vertex, normales, coordonnées Degré en Farenheit [ par edf102 ] bonjour,je suis en train de faire un prog qui convertit des degres farenheit en celcius mais je pige pas ce qui ce passe, c'est du c++double celcius(d Précision d'un double ? [ par chuckboy ] Quand je fais toto = 1.173222385022386;Alors toto prend comme valeurs 1.1732223850224.L'enfoiré me coupe des décimals ... comment faire pour tout gard listview et double clique... [ par orbb ] bonjour,j'ai crée une list view, j'aimerai savoir comment detecter le fait que l'utilisateur double clique sur une ligne...merci cosinus d'un tableau en c++ [ par keno83 ] Bonjour, je rencontre un probleme en ce moment: j'essaie de faire un cosinus d'un tableau comme ci dessous: cos(V[i+size/2]*(past/Eo)) Et a la compila


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Appels d'offres

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,187 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é.