Clase wxApp
La clase wxApp representa la propia aplicación cuando wxUSE_GUI=1.
Jerarquía:
Además de las características proporcionadas por wxAppConsole mantiene el seguimiento de la ventana principal (ver SetTopWindow()) y añade soporte para modos de video (ver SetDisplayMode()).
En general, la configuración para las aplicaciones con solo interfaz gráfica es accesible desde wxApp (o desde las clases wxSystemSettings o wxSystemOptions).
Eventos emitidos por esta clase
Macros para eventos emitidos por esta clase:
- EVT_QUERY_END_SESSION(func):
- Procesar un evento de consulta de fin de sesión, mediante la función miembro suministrada. Ver wxCloseEvent.
- EVT_END_SESSION(func):
- Procesar un evento de fin de sesión, mediante la función miembro suministrada. Ver wxCloseEvent.
- EVT_ACTIVATE_APP(func):
- Procesar un evento wxEVT_ACTIVATE_APP. Ver wxActivateEvent.
- EVT_HIBERNATE(func):
- Procesar un evento de hibernar. Ver wxActivateEvent.
- EVT_DIALUP_CONNECTED(func):
- Se ha establecido una conexión con la red. Ver wxDialUpEvent.
- EVT_DIALUP_DISCONNECTED(func):
- La conexión con la red se ha perdido. Ver wxDialUpEvent.
- EVT_IDLE(func):
- Procesar el siguiente evento wxEVT_IDLE event. Ver wxIdleEvent.
Tipos miembro
Appearance
enum class wxApp::Appearance { System , Light , Dark }
Parámetros posibles para SetAppearance().
- System
- Utilizar el aspecto predeterminado del sistema.
- Light
- Utilizar el aspecto claro.
- Dark
- Utilizar el aspecto oscuro.
AppearanceResult
enum class wxApp::AppearanceResult { Failure , Ok , CannotChange }
Valores posibles devueltos por SetAppearance().
- Failure
- No se ha podido cambiar la apariencia.
- Ok
- La apariencia se ha cambiado correctamente.
- CannotChange
- Ya no se puede cambiar la apariencia.
Funciones miembro
wxApp()
wxApp::wxApp()
Constructor.
Invocado implícitamente con la definición de un objeto wxApp
~wxApp()
virtual wxApp::~wxApp()
Destructor.
Será invocado implícitamente a la salida del programa si el objeto wxApp fue creado en la pila.
GetDisplayMode()
virtual wxVideoMode GetDisplayMode () const
Obtiene el modo de visualización que se utiliza. Solo se usa en framebuffer de adaptaciones de wxWidgets como wxDFB.
GetExitOnFrameDelete()
bool GetExitOnFrameDelete () const
Devuelve true si la aplicación terminará cuando el marco de mayor nivel sea eliminado.
Ver también
GetGUIInstance()
static wxAppConsole* wxApp::GetGUIInstance()
Devuelve el objeto wxApp de la interfaz gráfica de usuario (GUI) actual, si existe; de lo contrario, devuelve nullptr.
Esta función sólo debe utilizarse en los casos excepcionales en los que el mismo código deba funcionar tanto en aplicaciones de consola como en aplicaciones GUI, pero sea necesario utilizar funcionalidades específicas de la GUI si están disponibles; por lo tanto, limitarse a llamar a wxAppConsole::GetInstance() resulta insuficiente, mientras que utilizar wxTheApp es incorrecto, ya que el objeto de la aplicación no siempre es un wxApp de GUI.
Por ejemplo:
WXWidget handle = 0;
if ( wxApp* const app = wxApp::GetGUIInstance() ) {
if ( wxWindow* const w = app->GetTopWindow() ) {
handle = w->GetHandle();
}
}
//else: no hay ninguna ventana disponible
some_native_function_taking_a_window_handle(handle);
Hay que tener en cuenta que, en este ejemplo concreto, se podría utilizar GetMainTopWindow(), que ya hace lo mismo, en lugar de hacerlo uno mismo.
GetLayoutDirection()
virtual wxLayoutDirection GetLayoutDirection () const
Devuelve la dirección del diseño para la localización actual o wxLayout_Default si es desconocida.
GetMainTopWindow()
static wxWindow* wxApp::GetMainTopWindow()
Devuelve un puntero a la ventana principal de la aplicación, si existe.
Esta función se puede invocar con total seguridad incluso antes de crear el objeto de la aplicación o después de destruirlo, ya que simplemente devuelve nullptr si no existe. En caso contrario, equivale a llamar a wxTheApp->GetTopWindow().
GetTopWindow()
virtual wxWindow * GetTopWindow () const
Devuelve un puntero a la ventana superior.
Observaciones
Si la ventana superior no se ha establecido mediante SetTopWindow(), esta función buscará la primera ventana de nivel superior (marco, cuadro de diálogo o instancia de wxTopLevelWindow) en la lista interna de ventanas de nivel superior y la devolverá.
GetUseBestVisual()
bool GetUseBestVisual () const
Devuelve true si la aplicación usará la mejor visualización en sistemas que soporten diferentes visualizaciones, false en caso contrario. Ver SetUseBestVisual().
GTKAllowDiagnosticsControl()
static void wxApp::GTKAllowDiagnosticsControl()
Permite a wxWidgets suprimir de forma selectiva algunos mensajes de GTK.
Esta función se puede invocar para permitir que wxWidgets controle el registro de mensajes de GTK. No se debe invocar si la aplicación invoca por sí misma la función g_log_set_writer_func(), ya que esta función sólo se puede invocar una vez.
Se recomienda llamar a esta función en la versión sobrescrita de wxApp::OnInit() para permitir que wxWidgets suprima algunos mensajes de error GTK espurios, por ejemplo, los que se producen cada vez que se eliminan páginas de wxNotebook con las versiones actuales de GTK.
Disponibilidad: sólo disponible para la versión wxGTK..
GTKSuppressDiagnostics()
static void wxApp::GTKSuppressDiagnostics(int flags = -1)
Desactiva la impresión de diversos mensajes de GTK.
Esta función se puede invocar para suprimir los mensajes de diagnóstico de GTK que, por defecto, se envían al flujo de error estándar.
Si la variable de entorno WXSUPPRESS_GTK_DIAGNOSTICS se establece en un valor distinto de cero, wxWidgets invoca automáticamente esta función al iniciar el programa, utilizando el valor de dicha variable como indicadores si se trata de un número, o el valor predeterminado de los indicadores en caso contrario.
El valor predeterminado del argumento desactiva todos los mensajes, pero se puede pasar una bandera de máscara para desactivar específicamente sólo determinadas categorías de mensajes.
Hay que tener en cuenta que esta función sólo funciona cuando se utiliza glib 2.50 (lanzada en septiembre de 2016) o posterior, y no tiene ningún efecto con las versiones anteriores de la biblioteca.
Parámetros
- flags
- La máscara para los tipos de mensajes que se van a suprimir. Consultar la documentación de glib para la enumeración GLogLevelFlags, que define los distintos tipos de mensajes.
Disponibilidad: sólo disponible para la versión wxGTK.
IsActive()
virtual bool IsActive () const
Devuelve true si la aplicación está activa, es decir, si una de sus ventanas está actualmente en primer plano.
Si la función devuelve false y se necesita atraer la atención del usuario hacia la aplicación, se puede usar wxTopLevelWindow::RequestUserAttention para hacerlo.
MSWEnableDarkMode()
bool wxApp::MSWEnableDarkMode( int flags = 0, wxDarkModeSettings * settings = nullptr )
Habilita la compatibilidad experimental con el modo oscuro para aplicaciones MSW.
Esta función utiliza funciones no documentadas y no compatibles con Microsoft para habilitar la compatibilidad con el modo oscuro en aplicaciones de escritorio en versiones de Windows 10 posteriores a la v1809 (lo que incluye Windows 10 LTSC 2019) y en todas las versiones de Windows 11. Hay que tener en cuenta que las pruebas del modo oscuro en versiones de Windows anteriores a la 20H1 (es decir, la v2004) han sido limitadas; asegurarse de probar la aplicación con especial cuidado si el objetivo son estas versiones y se desea habilitar la compatibilidad con el modo oscuro.
Hay que tener en cuenta que el modo oscuro también se puede habilitar configurando la opción del sistema "msw.dark-mode" mediante una variable de entorno desde fuera de la aplicación o llamando a SetAppearance() con el parámetro System o Dark.
Las limitaciones conocidas de la compatibilidad con el modo oscuro incluyen:
- Cualquier elemento basado en la API Win32 TaskDialog() no es compatible con el modo oscuro: wxMessageBox(), wxMessageDialog, wxRichMessageDialog, wxProgressDialog y el wxAboutBox() simple (es decir, sin hipervínculos ni licencia). Considerar utilizar versiones genéricas (por ejemplo, wxGenericMessageDialog o wxGenericProgressDialog) si la compatibilidad con el modo oscuro es más importante que utilizar el cuadro de diálogo nativo.
- Los siguientes cuadros de diálogo que envuelven cuadros de diálogo comunes de Windows no admiten el modo oscuro: wxColourDialog wxFindReplaceDialog, wxFontDialog, wxPageSetupDialog, wxPrintDialog.
- wxTimePickerCtrl, wxDatePickerCtrl y wxCalendarCtrl no admiten el modo oscuro y utilizan el mismo fondo (claro) que el predeterminado en él.
- Los elementos de la barra de herramientas para los que se ha llamado a wxToolBar::SetDropdownMenu() no dibujan correctamente el menú desplegable, lo que lo hace casi invisible.
Parámetros
- flags
- Puede incluir wxApp::DarkMode_Always para forzar la activación del modo oscuro en la aplicación, incluso si el sistema no utiliza el modo oscuro por defecto. De lo contrario, el modo oscuro sólo se utiliza si es el modo predeterminado para las aplicaciones en el sistema actual.
- settings
- Si se especifica, permite personalizar la apariencia del modo oscuro. Consulte la documentación de wxDarkModeSettings para obtener más información.
Valor de retorno
true si se ha habilitado la compatibilidad con el modo oscuro, false si no se ha podido hacer, probablemente porque el sistema no es compatible con el modo oscuro.
Disponibilidad: sólo disponible para el puerto wxMSW.
ProcessMessage()
bool wxApp::ProcessMessage(WXMSG * msg)
Función exclusiva de Windows para procesar un mensaje.
Esta función se invoca desde el bucle de mensajes principal, comprobando si hay ventanas que deseen procesarlo.
La función devuelve "true" si el mensaje se ha procesado y "false" en caso contrario. Si se utiliza wxWidgets con otra biblioteca de clases que tenga su propio bucle de mensajes, se debe asegurar que se invoque esta función para permitir que wxWidgets reciba mensajes. Por ejemplo, para permitir la coexistencia con Microsoft Foundation Classes, sobrescribe la función PreTranslateMessage:
// Provide wxWidgets message loop compatibility
BOOL CTheApp::PreTranslateMessage(MSG *msg)
{
if (wxTheApp && wxTheApp->ProcessMessage((WXMSW *)msg))
return true;
else
return CWinApp::PreTranslateMessage(msg);
}
Disponibilidad: sólo disponible para la versión wxMSW.
SafeYield()
virtual bool SafeYield (wxWindow *win, bool onlyIfNeeded)
Esta función es similar a wxYield(), excepto porque desactiva la entrada del usuario para todas las ventanas del programa antes de llamar a wxAppConsole::Yield y las reactiva otra vez después.
Si win no es NULL, esta ventana permanecerá activa, permitiendo la implementación de alguna interacción limitada del usuario. Devuelve el resultado de la llamada a wxAppConsole::Yield.
Ver: wxSafeYield.
SafeYieldFor()
virtual bool SafeYieldFor (wxWindow *win, long eventsToProcess)
Funciona como SafeYield() con onlyIfNeeded == true salvo que permite especificar una máscara de eventos a procesar. Ver wxAppConsole::YieldFor para más información.
SetAppearance()
AppearanceResult wxApp::SetAppearance(Appearance appearance)
Solicita que la aplicación utilice el tema predeterminado del sistema o, de forma explícita, el tema claro o oscuro.
En GTK y macOS, las aplicaciones utilizan la apariencia predeterminada del sistema por defecto, por lo que sólo resulta útil llamar a esta función con los parámetros Appearance::Light o Appearance::Dark si se necesita anular la apariencia predeterminada del sistema. El efecto de llamar a esta función es inmediato, es decir, esta función devuelve AppearanceResult::Ok y afecta a todas las ventanas existentes, así como a cualquier ventana creada después de esta llamada.
En MSW, la apariencia predeterminada es siempre clara y las aplicaciones que deseen seguir la apariencia del sistema deben llamar explícitamente a esta función con el parámetro Appearance::System para hacerlo. Hay que tener en cuenta que el uso de la apariencia oscura en MSW requiere el uso de funciones del sistema no documentadas y tiene varias limitaciones conocidas; consulta MSWEnableDarkMode() para obtener más detalles. Además, en esta plataforma la apariencia sólo se puede establecer antes de que se creen las ventanas, y llamar a esta función demasiado tarde devolverá AppearanceResult::CannotChange.
Hay que tener en cuenta que para consultar la apariencia actual, se puede utilizar wxSystemAppearance; consultar wxSystemSettings::GetAppearance().
Valor de retorno
AppearanceResult::Ok si la apariencia se ha modificado correctamente o ya estaba establecida en el valor solicitado; AppearanceResult::CannotChange si la apariencia ya no se puede modificar porque es demasiado tarde para hacerlo, aunque sí se podría modificar si se hiciera inmediatamente al iniciar el programa la próxima vez (actualmente sólo lo devuelve wxMSW); o AppearanceResult:: Failure si el cambio de apariencia ha fallado por alguna otra razón, p. ej., porque GTK_THEME está definido al usar wxGTK o porque esta función no está implementada en absoluto para la plataforma actual.
SetDisplayMode()
virtual bool SetDisplayMode (const wxVideoMode &info)
Asigna el modo de visualización a usar. Solo se usa con versiones de wxWidgets con buffer de marcos, como wxDFB.
SetExitOnFrameDelete()
void SetExitOnFrameDelete (bool flag)
Permite al programador especificar si la aplicación debe salir cuando el marco de nivel superior es borrado.
Parámetros
- flag
- Si es true (valor por defecto), la aplicación saldrá cuando el marco de mayor nivel sea borrado. Si es false, la aplicación continuará ejecutándose.
Ver también
SetNativeTheme()
virtual bool SetNativeTheme (const wxString &theme)
Permite cambiar el tema del entorno del interfaz de usuario durante la ejecución.
Actualmente solo está implementado para la versión wxGTK2. Devuelve true si el tema fue cambiado con éxito.
Parámetros
- heme
- Es el nombre del nuevo tema o la ruta absoluta de un gtkrc-theme-file.
SetTopWindow()
void SetTopWindow (wxWindow *window)
Asigna la ventana superior 'top'.
Se puede llamar a esta función desde OnInit() para hacer que wxWidgets sepa cual es la ventana principal. No es necesario asignar una ventana superior; solo es conveniente para que (por ejemplo) algunos diálogos sin propietario puedan usar una ventana específica como la ventana top.
Si no se especifica una ventana superior por la aplicación, wxWidgets se usará el primer marco o diálogo (o mejor, cualquier wxTopLevelWindow) en la lista de ventanas top-level, cuando necesite usar la ventana top. Si se ha invicado previamente SetTopWindow() y se necesita restaurar el comportamiento automático, se puede usar:
wxApp::SetTopWindow(NULL)
Parámetros
- window
- Es la nueva ventana top.
Ver también
SetUseBestVisual()
void SetUseBestVisual (bool flag, bool forceTrueColour=false)
Permite al programador especificar si la aplicación usará la mejor visualización en sistemas que soporten varias visualizaciones en la misma pantalla.
Este es el caso típico bajo Solaris y IRIX, donde la visualización por defecto es de solo 8 bits cuando ciertas aplicaciones soportan la ejecución en modo TrueColour.
Hay que tener en cuenta que esta función debe ser invocada en el constructor de la instancia de wxApp y no tendrá efecto si es llamada más tarde. Actualmente, esta función solo tiene efecto bajo GTK.
Parámetros
- flag
- Si es true, la aplicación usará la mejor visualización.
- forceTrueColour
- Si es true entonces la aplicación intentará forzar la visualización TrueColour y la abortará si no lo consigue.
Métodos y datos heredados
Por supuesto, ya que esta clase hereda de wxAppConsole, dispone de los métodos y datos miembro públicos y protegidos de ella, además de las clases que a su vez hereda de wxEvtHandler, wxEventFilter y wxObject.