Dessiner dans une fenêtre avec buffer [Résolu]

Signaler
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
-
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
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);
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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().
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
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 ?
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Je n'ai jamais utilisé la fonction FloodFill(). Elle sert à quoi? Et quel est ton but exactement?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
29
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++
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
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));
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
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...
Messages postés
283
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
4 juillet 2007
2
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