wxWidget:Rilevamento dell'evento clic sui controlli personalizzati
Domanda
Come aggiungere un ascoltatore di eventi clic al mio controllo personalizzato realizzato con wxWidgets?Il controllo personalizzato utilizza wxWindow come base.Nell'elenco degli eventi vedo
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
Ma non c'è wxEVT_LEFT_CLICK
o simili.
Soluzione
In genere, non vi è alcun evento "clic" (e nel caso di wxWidgets - non c'è).L'azione del clic è suddivisa nelle sue due parti:Mouse giù e mouse su.In genere quello che pensi come un evento "clic sinistro" viene effettivamente gestito in un evento "sinistra in alto".
Provalo:
- Passa il mouse sopra un pulsante (come il pulsante "Aggiungi commento" in questa pagina)
- Fare clic con il pulsante sinistro del mouse e tenerlo premuto
- Allontanare il mouse dal pulsante tenendolo premuto
- Rilascia il pulsante sinistro del mouse
- Non accade nulla!
Questa volta:
- Passa il mouse sullo stesso pulsante
- Fai clic sul pulsante a sinistra e tieni premuto
- Rilascia il pulsante sinistro del mouse
- L'azione "clic" che ti aspetti viene attivata dall'evento up!
Altri suggerimenti
In primo luogo consiglio di ereditare da wxControl e non da wxWindow, wxControl è progettato per quello scopo esatto ed è meno probabile che ti ritrovi a combattere il sistema.Quando guardo un controllo che sto creando nella mia app wxWidgets, vedo che il mio gestore di clic è collegato a wxEVT_LEFT_DOWN.Osservando la mia copia di Programmazione GUI multipiattaforma con wxWidgets posso vedere un elenco di tutti i wxMouseEvents e non c'è wxEVT_LEFT_CLICK.Suggerirei che wxEVT_LEFT_DOWN sia l'evento da utilizzare.
Ora, dopo aver pubblicato, ho letto la risposta di Burly e sono d'accordo con lui, wxWidgets offre gli eventi di livello più basso e questo ti dà il massimo controllo dell'interfaccia utente che costruisci per i tuoi utenti.