L'évenementiel prend une place importante en VB6.
On traite en effet généralement de nombreux évènements tels que Click, Load, KeyDown.
En interne, c'est Windows qui récupère toutes les actions souris et clavier, qui est au courant de l'activation des fenêtres...
Il envoie donc tout un tas de messages aux différentes applications pour leur signifier ce qui se passe.
Le compilo de VB6 intègre automatiquement une boucle de traitement dans les executables.
Dans cette boucle, l'application inspecte la pile des messages que lui envoie Windows.
(On peut forcer un exe à traiter les messages de cette pile à tout moment dans le code via l'instruction DoEvents.)
Les messages de cette pile sont envoyés aux différentes fenêtres.
Les différentes fenêtres traitent les messages et déclenchent les évènements implémentés par le programmeur.
Nous nous proposons ici de placer une routine qui sera appelé à chaque message reçut par une fenêtre.
Les messages pourront être inspecté, et on aurat la possibilité de les bloquer pour que leur traitement normal ne soit pas effectuer.
Cette opération n'est pas anodine, et on pourra avoir des soucis avec le débogueur de VB6.
L'implémentation étant en partie effectuée dans un ocx, VB6 est stable, néanmoins, il arrive que notre fonction ne se fasse plus appeler ou encore qu'un point d'arrêt ne fonctionne pas.
Cette possède deux évènement :
1 Le premier permet d'inspecter des messages. Les messages sont traités normalement.
2 Le deuxième permet d'inspecter des messages, mais ceux-ci ne seront pas traités normalement.
(Attention : La valeur retourné pour les messages bloqué est de zéro, valeur commune mais pas universselle.).
Quelques mises en garde :
1 Le traitement des messages n'est pas particulièrement simple.
Il faut bien lire la doc avant de faire quoi que ce soit.
Un exemple: afficher du texte à chaque message WM_PAINT risque de créer beaucoup d'ennuis...
2 Windows envoie une grande quantité de messages : Mettre en place une procédure à chaque arrivée de message est couteux en CPU.
Dans le zip joint, il y a les sources d'un exe et d'un ocx.
L'exe montre quelques exemples de traitement de messages.