Dessin WIN32

Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 7 févr. 2005 à 18:47
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 - 10 févr. 2005 à 18:36
bonjour tout le monde.



je commence un logiciel de dessin (bon en fait pas tout a fait mais ne compliquons pas tout)
programmé en win32

jusqu'a présent pour afficher un pixel j'utilisais PutPixel() (ou SetPixel()? j'ai pas le code sous les yeux...)

seulement ca a ses limites.

ce que j'aimerais c'est un tableau de données qui contienne tout mon
écran (un écan virtuel, comme dans openGL avec le color_buffer)

probleme:

un fois que j'ai rempli mon tableau, comment je fais pour l'afficher?
que se passe t-il si je redimentionne ma fenetre? comment éviter que
l'affichage d'une image commence avant que la précédente ne soit
completement affichée, ce qui donne l'effet de scintillement ( idem en
opengl avec des fps trop élevés) ? est-ce possible d'éviter de passer
le hDC a ma dll a chaque fois que je redessine l'écran ( pour l'instant
pas moyen d'y couper; et avec un pointeur ca marche pas)



merci de votre coopération...

++

arnaud


_______________________


Omnia vincit labor improbus

10 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 févr. 2005 à 05:45
Salut,
Ben puisque personne te réponds...
Je crois que tu veux parler du double buffering. Sous windows, en gros, on crée un DC mémoire qui a les meme caracteristiques que le DC fenetre, on y dessine dedant, et on recopie d'un coup le DC mémoire dans le DC fenetre (avec bitblt).
C'est notamment cette technique que j'utilise dans ma source "des yeux", (lors du traitement du message WM_PAINT).
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
8 févr. 2005 à 18:50
ben, pas tout a fait.

enfin...

ce que tu me dis convient a ce que je voulais faire, mais c'est pas
tout a fait du double buffering...ou.. quoique...j'en sais rien . je
vais voir ta source, je l'avais déja vue, mais jamais le code.

ya moyen de faire du fullscreen avec?

_______________________


Omnia vincit labor improbus
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 févr. 2005 à 19:15
Salut,
Tu as parlé de "tableau qui contient ton écran" et "d'afficher le tableau" donc j'ai pensé au DC mémoire.
Sinon pour le fullscreen, il me semble qu'on fait ca en metant le style WS_EX_TOPMOST a la fenetre, et en lui donnant les dimensions de l'ecran.
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
8 févr. 2005 à 20:46
dis donc j'ai essayé ton truc

mon écran est tout moir, impossible de dessiner

et pis j'ai pas l'impression qu'on puisse choisir un pixel précis pour le mettre dans la couleur qu'on veut si?

_______________________


Omnia vincit labor improbus
0

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

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 févr. 2005 à 20:57
Salut,
Ben la fenetre est noire car le brush du background de ta fenetre doit etre noir.
Sinon tu peux y dessiner normalement en traitant le WM_PAINT, comme toutes les fenetres.
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
8 févr. 2005 à 21:17
ouais en fait je dessinais noir sur noir...la j'ai du rouge sur noir ca pete le feu

"Sinon tu peux y dessiner normalement en traitant le WM_PAINT, comme toutes les fenetres."

c'est bien ca le probleme, je sais pas du tout comment on fait, moi au départ c'est openGL only

t'as pas un bon tuto sous la main pour les fonctions principales
de dessin? moi ce qui m'intéresse c'est de pouvoir dire au prog: le pixel de coordonnées (10,200), ben tu le mets en orange



merci de ton aide


_______________________


Omnia vincit labor improbus
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
8 févr. 2005 à 21:35
Salut,
OpenGL j'y connais rien, il etait question de win32.
Pour créer la fenetre de ton prog, tu as du commencer par enregistrer une class (avec RegisterClass()) qui contient les infos de ta fenetre (comme la WndProc, ou le Brush qui sert a dessiner le fond de la zone client, etc...).
Le message WM_PAINT est, comme tout les autres messages, recu par la WndProc de ta fenetre.

Pour le tuto, j'en ai pas, mais je ne peux que te conseiller de lire le Petzold:
http://betouchi.free.fr/doc_et_ebook/prog_win32/Petzold5.chm

Enfin, pour l'histoire du pixel, l'api a utiliser est SetPixel(...), mais il existe plein d'autres api pour dessiner, la je te conseille d'aller jetter un coup d'oeil sur msdn.
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
9 févr. 2005 à 16:57
OK merci bcp, dl en cours, je vais sur msdn de suite.

juste uune derniere question en passant: si on crée un bitmap
(createcompatiblebitmap) on peut pas y accéder par unn truc genre
mon_bitmap[numéro_colonne][num_ligne]=RVB(1 125 2);

???

(je doute)

en tout cas je me renseigne
_______________________


Omnia vincit labor improbus
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
9 févr. 2005 à 17:19
Salut,
Non il faut le selectionner dans un DC (ici le DC mémoire) avant de pouvoir faire cela, puis utiliser SetPixel(...).
0
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
10 févr. 2005 à 18:36
Vouaip c'est bien ce que j'avais cru comprendre a la lecture du Petzold

Merci pour tout



++


_______________________


Omnia vincit labor improbus
0
Rejoignez-nous