wxWidgets: Détection d'événement de clic sur les contrôles personnalisés
Question
Comment ajouter un écouteur d’événements click à mon contrôle personnalisé créé avec wxWidgets? Le contrôle personnalisé utilise wxWindow comme base. Sur la liste des événements, je vois
wxEVT_LEFT_DOWN
wxEVT_LEFT_UP
wxEVT_LEFT_DCLICK
wxEVT_MIDDLE_DOWN
wxEVT_MIDDLE_UP
wxEVT_MIDDLE_DCLICK
wxEVT_RIGHT_DOWN
wxEVT_RIGHT_UP
wxEVT_RIGHT_DCLICK
wxEVT_MOTION
wxEVT_ENTER_WINDOW
wxEVT_LEAVE_WINDOW
wxEVT_MOUSEWHEEL
Mais il n'y a pas de wxEVT_LEFT_CLICK
ou similaire.
La solution
Généralement, il n'y a pas de " clic " événement (et dans le cas de wxWidgets - il n'y en a pas ). L'action de cliquer est divisée en ses deux parties: Mouse Down et Mouse Up. En règle générale, ce que vous appelez un " clic gauche " L’événement est en fait traité de manière "gauche". événement.
Essayez-le:
- survolez un bouton (tel que le bouton "Ajouter un commentaire" de cette page)
- Cliquez avec le bouton gauche de la souris et maintenez enfoncé
- Déplacez la souris hors du bouton en maintenant enfoncé
- Relâchez le bouton gauche de la souris
- Rien ne se passe!
Cette fois-ci:
- survolez le même bouton
- Cliquez sur le maintenez enfoncé le bouton gauche de la souris
- Relâchez le bouton gauche de la souris
- Le " clic " l'action que vous attendez est déclenchée par l'événement up!
Autres conseils
En premier lieu, je recommande d'hériter de wxControl et non de wxWindow, wxControl est conçu pour cet objectif précis et vous risquez moins de vous battre contre le système. Lorsque je regarde un contrôle que je construis dans ma propre application wxWidgets, je vois que mon gestionnaire de clics est attaché à wxEVT_LEFT_DOWN. En examinant ma copie de la programmation d'interface graphique multi-plateforme avec wxWidgets, je peux voir une liste de tous les événements wxMouseEvents, et il n'y a pas wxEVT_LEFT_CLICK. Je suggérerais que wxEVT_LEFT_DOWN soit l'événement à utiliser.
Maintenant, après avoir posté mes notes, j'ai lu la réponse de Burly et je suis d'accord avec lui. wxWidgets offre les événements de niveau le plus bas, ce qui vous donne le maximum de contrôle sur l'interface utilisateur que vous construisez pour vos utilisateurs.