begin process at 2008 05 16 06:36:07
1 173 219 membres
61 nouveaux aujourd'hui
13 970 membres club

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 : pd de cdc en mémoire :( [ Archives / Graphique ] (CoyoteVsBeepBeep)

pd de cdc en mémoire :( le 05/01/2006 11:36:19

CoyoteVsBeepBeep
Membre Club

hello,
j'ai un petit soucis avec du graphisme.
j'ai une boite de dialogue dans laquelle je veux faire une petite animation (background + une animation par dessus)
j'ai 3 classes.
une classe pour ma boite de dial, une classe background et une classe animation.
dans la classe de ma boite de dial, je crée un timer pour dessiner le fond et l'animation toutes les x millisecondes.
dans ce timer, je prends le device context de ma fenetre, et je crée un contexte compatible en mémoire dans lequel je veux dessiner.
dans ce contexte en mémoire, je dessine le fond et mon animation.
ensuite, je recopie tout en meme temps a l'écran.
pour background et animation, je fais une initialization a partir du device contexte de ma fenetre: je crée des DC compatible en mémoire (variable membre) pour les initialiser avec le fond (qui sera fixe) en une image que je vais modifier au cours du temps (animation)

lorsque je fais tout ca, ben j'ai rien a l'écran.....
voila le code.  je crois que mon explication est grave embrouillé.....  

dans la classe de ma boite de dial, je crée un object background et animation que j'initialise de la maniere suivante:
CDC * pDC=GetDC();
background.Create(pDC);
animation.Create(pDC);
ReleaseDC(pDC);

dans ma classe background, j'ai:
Create(CDC * pDC)
{
   CDCbackground.CreateCompatibleDC(pDC);   
   HBITMAP BMPbackground = LoadBitmap(AfxGetInstanceHandle(), n° ressource interne de mon bmp);
   CDCbackground.SelectObject(BMPbackground);
}
dans ma classe animation:.
Create(CDC * pDC)
{
   CDCAnimation.CreateCompatibleDC(pDC);   
 //je prepare toute mes images   
HBITMAP BMPAnimation[0] = LoadBitmap(AfxGetInstanceHandle(), n° ressource interne de mon bmp);
  HBITMAP BMPAnimation[1] = LoadBitmap(AfxGetInstanceHandle(), n° ressource interne de mon bmp);
  HBITMAP BMPAnimation[2] = LoadBitmap(AfxGetInstanceHandle(), n° ressource interne de mon bmp);
.
.
  //je selectionne la premiere
   CDCAnimation.SelectObject(BMPAnimation[0] );
}

 dans ma boite de dial, je crée un timer.
dans ce timer, je mets:

CDC * pDC=GetDC();
CDC memDC;
menDC.CreateCompatibleDC(pDC);  //créer un contexte en memoire

//dessin du fond dans la mémoire
background.DrawBackGround(&memDC);
//dessin de l'animation dans la mémoire
animation.DrawAnimation(&memDC);

//recopie le context memoire sur l'écran
pDC->BitBlt(rcClient.left,rcClient.top,rcClient.Width(), rcClient.Height(), &memDC, SRCCOPY);
ReleaseDC(pDC);

le but étant de travailler dans la memoire et de tout recopier a la fin

dans ma classe background, j'ai
DrawBackGround(CDC * memdc)
{
   CRect rcClient=GetClientRectangle();
   
   memdc->BitBlt(rcClient.left,rcClient.top,rcClient.Width(), rcClient.Height(), &CDCbackground, SRCCOPY);
}
dans ma class animation, j'ai
DrawBackGround(CDC * memdc)
{
   memdc->BitBlt(animation_position_x, animation_position_x, 32, 32, &CDCAnimation, SRCCOPY);
   //je prepare ma prochaine image (index=variable membre)
   index=(index+1)%16;
  CDCAnimation.SelectObject(BMPAnimation[index] );
}


ps: si dans mon timer je ne passe pas par un contexte intermédiaire (memdc) et que je travaille directement dans pDC (contexte de ma fenetre) ca marche tres bien, mais j'ai un phénomene de flickering. mon image clignote et c'est pas tres beau parce que le fond et l'animation ne sont pas dessiné en meme temps  

help, please......


Re : pd de cdc en mémoire :( le 05/01/2006 12:09:01

Classé sous : animation, pdc, cdc, memdc, rcclient

Participer à cet échange

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS