Graphique ds boite dialogue

cs_titio Messages postés 6 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 26 mars 2006 - 2 mai 2005 à 12:06
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 2 mai 2005 à 14:31
Bonjour,
Je souhaite afficher un dessin dans une boite de dialogue. A priori, c'est simple, il suffit de lancer le dessin dans le message WM_PAINT, mais lorsque je fais cela, a l'ouverture, il n'affiche plus les autres controles, et de plus, le programme est comme en boucle infinie dans le message (il semble recevoir sans arret des WM_PAINT). Lorsque je lance dans une fenetre normale, le meme code est stable (pas de generation continuelle de WM_PAINT). T a t il des differences de traitement entre boite de dialogue et fenetres normales ? Avez vous une solution afin de ne pas bloquer le systeme avec les WM_PAINT ?

Merci

3 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
2 mai 2005 à 13:47
C'est pas vraiment une chose à faire d'intercepter le WM_PAINT
d'un Dialog. Je te conseille de sous-classer un STATIC (par exemple) du
Dialog, et de dessiner dans le WM_PAINT de ce static. Si tu recois sans
arrêt des WM_PAINT, c'est sans doute que tu ne valides pas la zones que
tu viens de dessiner, les WM_PAINT arivent tant qu'une region de la
fenêtre est invalidée. Pour être sur que ce soit fait il faut utiliser
BeginPaint et EndPaint ou faire un ValidateRect à la fin de ton dessin
0
cs_titio Messages postés 6 Date d'inscription mercredi 23 mars 2005 Statut Membre Dernière intervention 26 mars 2006
2 mai 2005 à 14:06
En effet, merci, en validant, ca fonctionne.
Pourquoi n'est ce pas une chose a faire d'intercepter le WM_PAINT d'un dialogue ? Qu'entends tu par sous classer un STATIC ? (Je precise que je suis plutot debutant en prog windows, et que j'utilise le langage C avec l'API Win32, pas les MFC..) ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
2 mai 2005 à 14:31
Sous classer ca veut dire que tu lui donnes un autre WndProc, avec
SetWindowLong. C'est très pratique, et ca te permet d'intercepter tous
les messages que recoit un static en l'occurence.

Pour ma part je préfère ca à aller directement dans la WM_PAINT d'un
dialog, mais si ca marche comme ca tu peux le faire bien entendu.
0
Rejoignez-nous