begin process at 2012 05 29 11:31:58
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Graphique

 > 

Double buffering sur une CDialog (dessin sous MFC)


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

Double buffering sur une CDialog (dessin sous MFC)

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ée 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? Erreur [ par Onepenar ] Bonjour,je suis en train de faire une application  visual c++de type document/view qui permet de peindre différentes formes sur l'écran. J'ai donc du 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


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 : 1,513 sec (4)

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