ilwika
Messages postés4Date d'inscriptionvendredi 14 avril 2006StatutMembreDernière intervention18 avril 2006
-
14 avril 2006 à 11:41
cs_coq
Messages postés6351Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
19 avril 2006 à 22:32
Bonjour!!
J'explique mon problème :
Je dois capturer les événements de la souris sur un contrôle ActiveX.
Je comptais utiliser les méthodes Mousexxx (notamment MouseMove) mais
je me suis aperçu que mon contrôle ne disposait pas de ce type de
méthodes.
J'ai exploré le net mais je n'ai rien trouvé de particulier sur mon problème.
Donc, au final, est ce que quelqu'un aurait une idée, une piste ou encore mieux, une solution pour m'aider?
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 14 avril 2006 à 13:18
Salut, le problème c'est que même avec un filtre de message sur l'application on ne devrait pas recevoir le message WM_MOUSEMOVE.. Tu peux installer un hook mais si tu ne connais pas ça risque d'être un peu difficile..
Y'a une solution qui est pas des plus élégante ( quoi que .. ) mais bien pratique, superpose un contrôle transparent par dessus l'activeX, même position, et même taille ( Location et Bounds ) et utilises ses événèments.
private class MouseTrap : Control
{
private const int WS_EX_TRANSPARENT = 0x00000020;
ilwika
Messages postés4Date d'inscriptionvendredi 14 avril 2006StatutMembreDernière intervention18 avril 2006 14 avril 2006 à 16:10
Ok, je vois le principe. Mais la subtilité qui me gène, c'est que le contrôle ActiveX doit aussi récupérer les événements. Donc, avec ta méthode, est ce que le contrôle transparent capture tout et ne laisse rien au contrôle ActiveX?
Sinon, les hook, je me suis documenté dessus, j'ai essayé de comprendre des codes de démonstrations sur le net mais j'ai jamais réussi à le faire marcher. Mais si tu dit que c'est la méthode la plus propre pour y arriver, je vais me remettre dessus.
cs_coq
Messages postés6351Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 15 avril 2006 à 21:59
Chez moi ça passe.
J'avais tester sur du WebBrowser et du WMP.
Et dans le cas du WB, l'event ne fonctionne plus après un appel à Navigate (mais on voit bien défiler les WM_MOUSEMOVE dans Spy++)
J'ai dû rater qqch...
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 16 avril 2006 à 00:00
Je viens de comprendre..
J'ai testé avec ton filtre.. mais l'événement MouseMove ne se déclenchait pas, j'ai donc déduit que ça marchait pas sur les activeX.
Mais en fait j'avais pas ajouté le filtre avec Application.AddMessageFilter j'étais persuadé que ta classe le faisait dans le constructeur, surout qu'elle appelle bien Application.RemoveMessageFilter dans la méthode Dispose.. Bon en gros j'ai été un peu vite dans ma dédution mais c'est un peu de ta faute aussi.. et pis c'est tout !!
cs_coq
Messages postés6351Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 16 avril 2006 à 00:08
lol
Je pars du principe qu'on doit pouvoir initialiser l'instance sans forcément l'activer de suite, mais je vais éditer pour mettre un exemple d'utilisation, pour ceux qui ne prennent pas la peine de regarder le projet de test :p