fr.comp.os.ms-windows.programmation
Affichage de l'article :
Re: Tutorial : Programmer en 'C' sous windows (L4)

Date : Le 03 avril 2008
From : Sylvain SF
Sujet : Re: Tutorial : Programmer en 'C' sous windows (L4)

Vincent Burel wrote on 03/04/2008 12:12:
>
> MessageBox (ou à toute ouverture de boite de dialogue modale) fait
> rentrer le code dans la boucle de message de la boite de dialogue. Ce
> n'est plus notre MessageLoop qui traite les événement mais celle de
> la boite de dialogue. et c'est cette boucle qui par le dispatch
> appelle notre callback avec l'événement WM_TIMER par exemple.

non, c'est bien le GetMessage() / DispatchMessage() de votre main
qui traite l'event WM_TIMER dans la fenêtre principale.

une pompe à message traite tous les messages destinés à la fenêtre
dont le handle est transmis à GetMessage() (2nd parametre), plus
précisemment à cette fenêtre et à tous ses childs ... sauf pour
toute fenêtre qui enregistre un autre event handler via un autre
GetMessage(), c'est le cas de MessageBox, il utilise un
GetMessage(&e, hWnd_du_dialog, ...) qui de fait provoque le
caractère modal et cette gestion séparée.

votre appli a contrario utilise un GetMessage(&e, null, ...)
afin de recevoir les msg pour toutes les fenêtres créés dans le
scope de votre HINSTANCE (toutes sauf celles qui ...).


>> on reçoit des WM_TIMER mais également des WM_UPDATE (les fenêtres
>> sont le dialogue modal sont bien redessinées) et tous messages qui
>> ne soit pas un ""user event"" (event souris ou clavier).
>
> oui, même des MOUSEMOVE si j'en crois le spy++

et de nombreuses appli. (browser par exemple pour afficher l'URL
d'un tag , mais d'autres avec affichage d'info-bulles) traitent
ce mousemove sans prendre en compte le statut actif ou non de la
fenêtre.

> comment expliquer que notre code attende la sortie de la fonction
> MessageBox et qu'il puisse en même temps continuer de faire tourner
> la boucle de message ?

le code (un code comparable à votre tuto) n'est pas multi-thread,
mais il est quand même réentrant.
l'appel à MessageBox est bloquant pour votre thread principal
unique, cela n'empêche pas le système de réappeler votre
procédure de traitement de message ('MainWindowManageEvent').
le fait que l'appli soit mono-thread implique seulement qu'un
seul message puisse être traité à la fois.

Sylvain.


Posez vos questions, réponses et remarques sur les forums de FrameIP



mot clé : tutorial ip l4 windows programmer vpn en sous fr ipv4 c windows comp programmation ipv6 tcpip os re voip ms

Copyright © 2003-2010 FrameIP TcpIP. Tous droits réservés. Les marques et marques commerciales mentionnées appartiennent à leurs propriétaires respectifs. L'utilisation de ce site Web TcpIP implique l'acceptation des conditions d'utilisation et du règlement sur le respect de la vie privée.
Sécurité entreprise Comparatif Adsl SSII Reseaux Sécurité Test ADSL