Clase wxEventFilter
Un filtro de eventos global para preprocesar todos los eventos generados en el programa.
Jerarquía:

Esta es una clase muy simple que solo proporciona el método virtual FilterEvent() para ser llamado por wxEvtHandler antes de iniciar el proceso de cualquier evento. Por lo tanto, heredar de esta clase y sobrescribir FilterEvent() permite capturar y posiblemente manejar o ignorar todos los eventos que ocurren en el programa. Por supuesto, tener filtros de eventos añade una sobrecarga adicional a cada procesamiento de eventos, por lo que no debe utilizarse a la ligera y el código FilterEvent() debe tratar de volver lo más rápidamente posible, especialmente para los eventos que no le interesan.
Un ejemplo de uso de esta clase:
// Esta clase permite determinar la última vez que el usuario // ha trabajado con esta aplicación: class LastActivityTimeDetector : public wxEventFilter { public: LastActivityTimeDetector() { wxEvtHandler::AddFilter(this); m_last = wxDateTime::Now(); } virtual ~LastActivityTimeDetector() { wxEvtHandler::RemoveFilter(this); } virtual int FilterEvent(wxEvent& event) { // Update the last user activity const wxEventType t = event.GetEventType(); if ( t == wxEVT_KEY_DOWN || t == wxEVT_MOTION || t == wxEVT_LEFT_DOWN || t == wxEVT_RIGHT_DOWN || t == wxEVT_MIDDLE_DOWN ) { m_last = wxDateTime::Now(); } // Continuar procesando el evento normalmente también. return Event_Skip; } // Esta función podría ser llamada periódicamente desde algún // temporizador para hacer algo (por ejemplo, ocultar datos sensibles // o cerrar la sesión en el servidor remoto) si el usuario ha estado // inactivo durante algún periodo de tiempo. bool IsInactiveFor(const wxTimeSpan& diff) const { return wxDateTime::Now() - diff > m_last; } private: wxDateTime m_last; };
hay que tener en cuenta que wxApp deriva de wxEventFilter y se registra como un filtro de eventos durante su creación, por lo que también puede anular el método FilterEvent() en su clase derivada de wxApp y, de hecho, esta es a menudo la forma más conveniente de hacerlo. Sin embargo crear una nueva clase derivada directamente de wxEventFilter permite aislar el código de filtrado de eventos en su propia clase separada y también tener varios filtros independientes, si es necesario.
Tipos públicos
enum { Event_Skip = -1 , Event_Ignore = 0 , Event_Processed = 1 }
Posibles valores de retorno para FilterEvent().
- Event_Skip
- Procesar el evento como de costumbre.
- Event_Ignore
- No procesar el evento normalmente en absoluto.
- Event_Processed
- El evento ya fue manejado, no lo proceses normalmente.
Funciones miembro
wxEventFilter()
wxEventFilter::wxEventFilter()
Constructor por defecto.
El constructor no registra este filtro usando wxEvtHandler::AddFilter(), es responsabilidad del programa hacerlo cuando sea necesario.
Nótese que los objetos de esta clase no pueden ser copiados.
~wxEventFilter()
virtual wxEventFilter::~wxEventFilter()
Destructor.
Se debe llamar a wxEvtHandler::RemoveFilter() antes de destruir este objeto (posiblemente desde el destructor de la clase derivada), el no hacerlo se indica con una aserción a menos que las aserciones estén deshabilitadas.
FilterEvent()
virtual int wxEventFilter::FilterEvent(wxEvent & event)
Anular este método para implementar el preprocesamiento de eventos.
Este método permite filtrar todos los eventos procesados por el programa, por lo que se debe intentar retornar rápidamente desde él para evitar ralentizar el programa hasta la saciedad.
Aunque el tipo de retorno de este método es int, esto se debe únicamente a cuestiones de compatibilidad con versiones anteriores y el valor de retorno real debe ser una de las constantes Event_XXX definidas anteriormente:
- Event_Skip para continuar procesando el evento normalmente (debería usarse en la mayoría de los casos).
- Event_Ignore para no procesar este evento en absoluto (esto se puede utilizar para suprimir algunos eventos).
- Event_Processed para no procesar este evento normalmente pero indicar que ya ha sido procesado por el filtro de eventos y por lo tanto tampoco debería procesarse por defecto (esto solo debería usarse si el filtro realmente procesó el evento).
Implementado en wxAppConsole.