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
12
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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
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
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
15
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
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
15
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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
20
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