event.h

Clase wxCloseEvent

Esta clase de eventos contiene información sobre eventos de cierre de ventanas y sesiones.

Jerarquía:

Jerarquía de la clase wxCloseEvent

La función manejadora de EVT_CLOSE es invocada cuando el usuario ha intentado cerrar un marco o cuadro de diálogo utilizando el gestor de ventanas (X) o el menú del sistema (Windows). También puede ser invocada por la propia aplicación mediante programación, por ejemplo llamando a la función wxWindow::Close.

Se debe comprobar si la aplicación está forzando el borrado de la ventana utilizando wxCloseEvent::CanVeto. Si es falso, debe destruir la ventana utilizando wxWindow::Destroy.

Si el valor de retorno es verdadero, depende del programador si se responde destruyendo la ventana.

Si no se destruye la ventana, se debe llamar a wxCloseEvent::Veto para que el código que llama sepa que no ha destruido la ventana. Esto permite que la función wxWindow::Close devuelva true o false dependiendo de si la instrucción de cierre se cumplió o no.

Ejemplo de un manejador de wxCloseEvent:

void MyFrame::OnClose(wxCloseEvent& event)
{
    if ( event.CanVeto() && m_bFileNotSaved )
    {
        if ( wxMessageBox("The file has not been saved... continue closing?",
                          "Please confirm",
                          wxICON_QUESTION | wxYES_NO) != wxYES )
        {
            event.Veto();
            return;
        }
    }
 
    Destroy();  // you may also do:  event.Skip();
                // since the default event handler does call Destroy(), too
}

Ver también samples/dialogs para un ejemplo completo de interrupción del cierre de una aplicación cuando hay, por ejemplo, archivos sin guardar.

El evento EVT_END_SESSION es ligeramente diferente, ya que es enviado por el sistema cuando la sesión de usuario está terminando (por ejemplo, debido a un cierre de sesión o apagado) y por lo tanto todas las ventanas se cierran forzosamente. Al menos bajo MSW, después de que el manejador de este evento es ejecutado, el programa es simplemente eliminado por el sistema. Debido a esto, el manejador por defecto para este evento proporcionado por wxWidgets llama a todo el código de limpieza habitual (incluyendo wxApp::OnExit()) de modo que todavía podría ser ejecutado y exit()s el propio proceso, sin esperar a ser matado. Si este comportamiento es por alguna razón indeseable, hay que asegurarse de definir un manejador para este evento en la clase derivada de wxApp y no llamar a event.Skip() en ella (pero teniendo en cuenta que el sistema seguirá matando la aplicación).

Eventos que utilizan esta clase

Las siguientes macros manejadoras de eventos redirigen los eventos a manejadores de funciones miembro 'func' con prototipos como:

void handlerFuncName(wxCloseEvent& event)

Macros de eventos:

EVT_CLOSE(func)
Procesa un evento de comando wxEVT_CLOSE_WINDOW, suministrando la función miembro. Este evento se aplica a las clases wxFrame y wxDialog.
EVT_QUERY_END_SESSION(func)
Procesa un evento de sesión wxEVT_QUERY_END_SESSION, proporcionando la función miembro. Este evento solo se puede gestionar en clases derivadas de wxApp.
EVT_END_SESSION(func)
Procesa un evento de sesión wxEVT_END_SESSION, suministrando la función miembro. Este evento sólo se puede gestionar en clases derivadas de wxApp.

Funciones miembro

wxCloseEvent()

wxCloseEvent::wxCloseEvent( wxEventType commandEventType = wxEVT_NULL, int id = 0 )

Constructor.

CanVeto()

bool wxCloseEvent::CanVeto() const

Devuelve true si se puede vetar un cierre del sistema o un evento de cierre de ventana.

Vetar un evento de cierre de ventana no es posible si el código llamante desea forzar la salida de la aplicación, por lo que debe llamarse a esta función para comprobarlo.

GetLoggingOff()

bool wxCloseEvent::GetLoggingOff() const

Devuelve true si el usuario se está desconectando o false si el sistema se está apagando.

Este método solo puede ser llamado para eventos de fin de sesión y fin de sesión de consulta, no tiene sentido para eventos de cierre de ventana.

GetVeto()

bool wxCloseEvent::GetVeto() const

Devuelve si se ha activado el indicador Veto.

SetCanVeto()

void wxCloseEvent::SetCanVeto(bool canVeto)

Establece la bandera "puede vetar".

SetLoggingOff()

void wxCloseEvent::SetLoggingOff(bool loggingOff)

Establece la bandera de 'desconexión'.

Veto()

void wxCloseEvent::Veto(bool veto = true)

Llamar a esta función desde el manejador de eventos para vetar un cierre del sistema o para indicar a la aplicación que llama que no se ha producido un cierre de ventana.

Solo se puede vetar un cierre si CanVeto() devuelve true.

Métodos y datos heredados

Esta clase hereda los métodos y datos miembro públicos y protegidos de wxObject y wxEvent.