Dessiner dans une fenêtre avec buffer

Résolu
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 - 4 août 2005 à 20:47
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 - 5 août 2005 à 09:17
Je voulais savoir comment faire pour afficher un buffer de couleurs sur une fenêtre ?
Ou au pire comment dessiner tout simplement dans la fenêtre sans faire d'update... On utilise quand même beginpaint ?
J'ai relu 15 fois tout ce qu'ils disent à ce sujet dans le MSDN mais je trouve que niveau explications on peut que faire mieux, et les seuls exemples disponibles c'est redimensionner des images et tout

9 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 août 2005 à 08:52
HBITMAP hBitmap = CreateCompatibleBitmap(sourceDC, windowSize.right - windowSize.left, windowSize.bottom - windowSize.top);

Ca va créer en effet une bitmap en noir et blanc. Tu dois faire:

HBITMAP hBitmap = CreateCompatibleBitmap(targetDC, windowSize.right - windowSize.left, windowSize.bottom - windowSize.top);
3
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 août 2005 à 21:07
mais non, tu auras tout ce qu'il te faut dans Petzold:
http://brunews.free.fr/brunews/download/CP5.zip
http://brunews.free.fr/brunews/download/CP5Sources.zip

ciao...
BruNews, MVP VC++
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
4 août 2005 à 21:23
Salut,


Tu peux dessiner directement dans une fenêtre après avoir obtenu son
HDC avec GetDC(hWnd). Une fois le dessin terminé, tu libères ce HDC
avec ReleaseDC(hWnd,hdc). Le problème c'est que le dessin sera effacé
quand la fenêtre est réduite ou mise en arrière plan. C'est pour cela
qu'on utilise BeginPaint().
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
4 août 2005 à 21:56
Merci
J'ai pondu un petit script mais il me reste un problème

// dans la fonction d'initialisation
targetDC = GetDC(hWnd);
sourceDC = CreateCompatibleDC(targetDC);
HBITMAP hBitmap = CreateCompatibleBitmap(sourceDC, windowSize.right - windowSize.left, windowSize.bottom - windowSize.top);
SelectObject(sourceDC, hBitmap);

// quand on commence un rendu
FloodFill(sourceDC, 0, 0, RGB(255, 0, 0)); // notez bien que c'est du rouge

// quand on finit un rendu
BitBlt(targetDC, 0, 0, windowSize.right - windowSize.left, windowSize.bottom - windowSize.top, sourceDC, 0, 0, SRCCOPY);

// entre les deux, mais juste pour tester
Rectangle(sourceDC, 50, 60, 250, 400);


le rectangle apparait en blanc sur un fond noir...
normal ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
4 août 2005 à 23:18
Je n'ai jamais utilisé la fonction FloodFill(). Elle sert à quoi? Et quel est ton but exactement?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
4 août 2005 à 23:46
Tu devrais utiliser ExtFloodFill(), faut pas démarrer un nouveau code avec les anciennes fonctions.
Fait le remplissage d'une zone avec le cuurent brush, pratique pour faire des graphes et autres bidules de ce genre.

ciao...
BruNews, MVP VC++
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
5 août 2005 à 08:45
FloodFill ça remplit le truc entièrement en une couleur normalement

Sinon même avec ExtFloodFill ça ne le met pas en rouge (pourtant il demande un COLORREF comme argument)
Je ne peux pas utiliser de brush parce que c'est pour faire un rendu en 3D, alors je me vois mal créer un brush pour chaque pixel mais plutot utiliser SetPixel qui demande lui aussi un COLORREF. Le problème est que ça ne marche pas non plus [avec SetPixel].

Mon code au cas où ce serait une erreur de ma part (ce qui m'étonnerait vu la simplicité du script) :

for (int i = 50; i < 250; ++i)
for (int j = 60; j < 400; ++j)
SetPixel(sourceDC, i, j, RGB(255, 0, 0));
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
5 août 2005 à 08:47
Je viens de découvrir que si je mets :
SetPixel(sourceDC, i, j, RGB(255, 0, 255));
c'est à dire avec une autre couleur, ça apparait en blanc ! A mon avis le HBITMAP que je sélectionne est en noir & blanc...
0
CyberP Messages postés 283 Date d'inscription mercredi 8 janvier 2003 Statut Membre Dernière intervention 4 juillet 2007 2
5 août 2005 à 09:17
Ahhhh merci ça fonctionne :)
Mais comment faire pour changer le nombre de bits par exemple
Parce que SetDIBitmap demande un tableau de couleurs (dans le BITMAPINFO) et ça je veux pas par exemple
0
Rejoignez-nous