4 votes

Attraper les événements de clic / double clic dans le conteneur du contrôle?

Nous avons un contrôle tiers dans notre projet créé par SubSystems.com, appelé le TE Edit Control, aussi connu sous le nom de "Tern", qui est un peu comme un émulateur de traitement de texte. J'ai cherché dans SO si quelqu'un d'autre avait utilisé ce contrôle, mais il semble que ce ne soit pas très populaire. Ils n'ont pas de coordonnées de contact pour le support; ils facturent toute personne ayant besoin d'aide avec leur produit.

Quoi qu'il en soit, il se passe quelque chose de très étrange dans les événements de leur contrôle - spécifiquement le MouseClick et le MouseDoubleClick. S'il y a une image dans le document, et que vous double-cliquez sur l'image, aucun événement n'est déclenché. Mais si vous faites ensuite un clic simple sur le corps du document, soudain l'événement DoubleClick du contrôle se déclenche, au lieu de l'événement de clic simple. Il semble que l'événement soit mis en file quelque part et se réveille au mauvais moment.

Je n'ai pas l'intention de perdre mon temps à essayer de comprendre pourquoi leur contrôle se comporte de façon si étrange. Mais j'ai besoin d'une solution de contournement pour ce comportement. Y a-t-il un moyen de transmettre les clics de la souris sur ce contrôle à travers le contrôle conteneur, pour pouvoir au moins essayer d'utiliser une source plus fiable pour mes événements?

Toute suggestion sur la manière de capturer de manière fiable les événements de clic/double-clic serait grandement appréciée!

0 votes

Hmya, un grand budget publicitaire laisse rarement beaucoup de place pour un soutien décent. Dérivée votre propre classe du contrôle et le remplacement de WndProc() est la seule option décente que vous avez.

5voto

Phil Wright Points 11696

Une approche consiste à ajouter un filtre de messages au niveau de l'application.

Vous pouvez le faire en utilisant la Application.AddMessageFilter(...). Le paramètre de l'appel est un objet instance qui implémente l' IMessageFilter qui est une interface avec juste une méthode appelée PreFilterMessage. Cette méthode est appelée pour chaque message de fenêtre dans votre application avant qu'il ne soit envoyé à la cible appropriée. Ainsi, vous pouvez espionner les messages de la souris avant qu'ils ne soient envoyés à ce contrôle problématique. De cette manière, vous pouvez faire ce que vous voulez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X