cs_Stephane
Messages postés550Date d'inscriptionvendredi 5 janvier 2001StatutMembreDernière intervention23 septembre 2006
-
12 févr. 2005 à 22:06
cs_Stephane
Messages postés550Date d'inscriptionvendredi 5 janvier 2001StatutMembreDernière intervention23 septembre 2006
-
14 févr. 2005 à 09:57
Salut a tous
voila, j'utilise l'API SetPixel pour remplir une zone dont je connais le HDC (passée en parametre par une appli VB).
Mon probleme est que quand la DLL C++ a fini de dessiner les pixels, et
qu'elle rend la main a l'appli VB, ce qui a été dessiné n'est pas
"figé" cad que si je deplace la fenetre en dehors de l'écran, et que je
la ramene, une partie s'efface !
comment faire pour "memoriser" cette nouvelle image dessinée ??
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 13 févr. 2005 à 00:11
Tout dépend du contexte sur lequel tu dessines.
Si je me rappelles bien, avec VB si tu dessines sur une picturebox, tu dois mettre la propriété autoredraw (ou autorefresh) a true.
Ainsi, l'image sera dessiné a chaque fois que l'événement WM_PAINT sera intercepté.
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 13 févr. 2005 à 09:47
J'ai peut etre une methode 'bourrin' mais qui marchera a coup sur :
Tu sous classes ton controle picture box, et tu geres son apparence a la reception de WM_PAINT.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 13 févr. 2005 à 12:25
AlexMAN> VB sous classe déjà les controles.
Le plus simple a faire et qu'une fois que tu as dessiné dans ta picturebox, tu sauvegardes sont contenu dans un .bmp puis tu le recharge ensuite tout en laisant l'autoredraw a true.
Ce sera transparent pour l'utilisateur.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201013 13 févr. 2005 à 13:38
C'est pas possible de "mémoriser" comme ca. De toutes facons, la DLL
devra se charger de dessiner à chaque fois qu'il y en a besoin. Par
ailleurs je ne comprends pas l'intérêt de ce que tu cherches à faire
(tu peux pas appeler SetPixel directement en VB?), mais si c'est pour
créer une bmp, ca ne sert à rien de faire une DLL.
DeAtHCrAsH
Messages postés2670Date d'inscriptionvendredi 25 janvier 2002StatutMembreDernière intervention 6 février 2013 13 févr. 2005 à 14:55
vecchio56> Tu peux bien évidemment appeller l'api depuis VB mais le problèùe sera le meme.
L'avantage de sauvegarder l'image faite c'est de ne pas avoir a la redessiner systématiquement.
Je m'imagine mal faire ca si l'image résulte d'un calcul d'une minute...
Il est bien plus rapide de charger des pixels deja défini dans un bmp que de devoir tout recalculé (exemple mandelbrot ou julia).
De toute maniere quand tu mets la proriété AutaRedraw a true, tu ne fait rien de plus que sous classé le controle et genéré un WM_PAINT qui redessinera a partir de la mémoire.
A ce compte la autant libéré la mémoire et travaillé a partir d'un fichier.
Sinon tu peux toucher a ta DLL et sauvegarder le résultat dans un fichier bmp, puis après l'appelle a ta fonction de la DLL, tu charges l'image avec PictureBox1.LoadFromFile ( ca doit resembler a ca je crois).
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201013 13 févr. 2005 à 18:49
Pas besoin de connaitre la structure d'une bitmap en fait, il suffit de
créer un DC mémoire et une bitmap corrspondante avec
CreateCompatibleBitmap, puis tu utilise le DC mémoire pour le copier
dans le vrai DC de la fenêtre. Tu as un exemple de cela dans la source
'Yeux' de aardman il me semble