wxWidgets:Erkennen von Klickereignissen auf benutzerdefinierten Steuerelementen
Frage
Wie füge ich meinem mit wxWidgets erstellten benutzerdefinierten Steuerelement einen Klickereignis-Listener hinzu?Das benutzerdefinierte Steuerelement verwendet wxWindow als Basis.Auf der Veranstaltungsliste sehe ich
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
Aber es gibt keinen wxEVT_LEFT_CLICK
o.ä.
Lösung
Normalerweise gibt es kein „Klick“-Ereignis (und im Fall von wxWidgets - gibt es nicht).Der Klickvorgang gliedert sich in zwei Teile:Maus runter und Maus hoch.Normalerweise wird das, was Sie als „Linksklick“-Ereignis bezeichnen, tatsächlich in einem „Linksklick“-Ereignis behandelt.
Versuch es:
- Bewegen Sie den Mauszeiger über eine Schaltfläche (z. B. die Schaltfläche „Kommentar hinzufügen“ auf dieser Seite).
- Klicken Sie mit der linken Maustaste und halten Sie die Maustaste gedrückt
- Bewegen Sie die Maus von der Taste weg, während Sie sie gedrückt halten
- Lassen Sie die linke Maustaste los
- Nichts passiert!
Diesmal:
- Bewegen Sie den Mauszeiger über dieselbe Schaltfläche
- Klicken Sie auf die Schaltfläche Linksmau und halten Sie sie gedrückt
- Lassen Sie die linke Maustaste los
- Die erwartete „Klick“-Aktion wird durch das up-Ereignis ausgelöst!
Andere Tipps
Im ersten Fall empfehle ich erben von wxControl nicht wxWindow, wxControl für die exakt Zweck ausgelegt ist und Sie sind weniger wahrscheinlich, dass sich kämpfen um das System zu finden. Als ich bei einer Kontrolle sehe ich in meinem eigenen WxWidgets app bauen bin, ich sehe, dass mein Click-Handler zu wxEVT_LEFT_DOWN angebracht ist. Suchen Sie in meiner Kopie von Cross Platform GUI-Programmierung mit wxWidgets kann ich eine Liste aller wxMouseEvents sehen, und es gibt keine wxEVT_LEFT_CLICK. Ich würde vorschlagen, wxEVT_LEFT_DOWN das Ereignis zu verwenden.
Jetzt nach der Einlieferung Ich habe Kräftige Antwort gelesen und ich stimme ihm zu, bietet WxWidgets den niedrigsten Level-Events und das gibt Ihnen die maximale Menge an Kontrolle über die Benutzeroberfläche Sie für Ihre Benutzer erstellen.