Traitement message WM_PAINT

Signaler
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
-
Bonsoir,

je vous explike : j'ai une dialog box modeless, mon pb c ke lors de l'affichage de la boite de dialogue, celle ci prend en fond la fenetre se trouvant derriere. Je fais pourtant un DefWindowProc lors du traitement d'aucun message, et je traite le message WM_PAINT dont voici le code :

onPaint:
sub esp, 64
push esp
push hwnd
call BeginPaint

push esp
push hwnd
call EndPaint

add esp, 48
jmp Fin
...
Fin:
xor eax, eax
ret 16

Voila, si kelkun pouvait me dire ou ca bloque et sil manque du code pour que vous compreniez, dites le jle posterai (si j'ai pas fait, c pour pas alourdir).

Merci d'avance

++

Alhexman

12 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
sub esp, 64 au debut, et add esp, 48 a la fin.
ou sont passés les 16 autres octets ?
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Ué dsl, c un movais post, ca change rien a l'histoire, add esp, 64 marche po ...
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
Tu as bien retourné 1 apres le traitement du WM_INITDIALOG ?
Sinon je comprends pas l'histoire du DefWindowProc, tu parles bien d'une dialogbox ?
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
C'est une dialog box MODELESS, si j'ai bien compris, ce style de dialogbox a les mm caracteristique k'une fenetre normale (dites moi si jme trompe), puis, WM_INITDIALOG n'est pas envoyé mais bien WM_CREATE donc ca confirme, et si jenleve le DefWindowProc, marche po...
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
arf j'avais pas vu le modeless, en plus j'ai jamais utilisé ce style de dialog.
Si ce style de dialog a les meme caracteristiques qu'une fenetre normale, je pense qu'il vaudrait mieux laisser DefWindowProc traiter le message (puisque tu ne dessine rien).
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
D'apres msdn, une dialogbox modeless recoit un message WM_INITDIALOG et non un WM_CREATE a sa creation.
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Ben je viens de regarder, CreateDialogParam envoie un message WM_INITDIALOG mais une simple messagebox prouve le contraire !
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
En fait, c'est bizarre voire incohérent puis ce kil disent ke CreateDialogParam qui appelle CreateWindow envoie le msg WM_INITDIALOG alors ke CreateWindow envoie un message WM_CREATE et apparemment, seul le msg WM_CREATE est envoyé !
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
faudrais comparer ce que tu fais avec d'autres sources.
Sur le site de ToutEnMasm il y a un exemple de dialog modeless..
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
Je viens de voir ke lorsk je definissais le fond avec NULL_BRUSH, aucun pb de fond ki prend la couleur de la fenetre derriere, enfin pas de pb koi, mais jV voir le site de ToutEnMasm paske la jsuis perplexe..Si tu trouve une explication, n'hesite pas
Merci aardman, ++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
http://www.cppfrance.com/code.aspx?id=21138

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
j'ai trouvé pkoi je recevais WM_CREATE et pas WM_INITDIALOG, ds ma boucle de traitement de msg, je ne fais pas de IsDialogMessage().Je voulais donc savoir si c'était "obligatoire" ? Paske si j'utilise cette fonction, je ne recois plus WM_KEYDOWN, et c pour cela ke j'ai utilisé dialgo box modeless..
Et pour ce qui est du fond, j'ai mis NULL_BRUSH, et ca fonctionne mais ca m'embete paske j'aurais bien aimé mettre une couleur differente en fond, si vous avez une solution, merci d'avance .

++