21 Barra de información

Cuando ocurre alguna cosa en la aplicación que requiere la atención del usuario disponemos de varias formas de mostrárselo.
Vimos, por ejemplo, los mensajes de la barra de estado. Sin embargo, esos mensajes suelen pasar desapercibidos y generalmente el usuario no les presta atención.
Otra alternativa es mostrar un wxMessageBox, pero esos mensajes interrumpen la ejecución del programa y pueden resultar molestos cuando el mensaje puede ser ignorado o el usuario ya conoce esa información y no le aporta nada nuevo.
Una tercera alternativa es usar una barra de información. Estos controles son algo intermedio entre las dos opciones anteriores. Se pueden mostrar en la parte superior o inferior de la ventana, pero sólo serán visibles cuando haya algo que mostrar. Además permiten añadir botones para que el usuario pueda elegir entre distintas alternativas.
Constructor
Para crear uno de estos controles se usa la clase wxInfoBar.
El constructor es simple, y sólo requiere dos parámetros: un puntero a la ventana padre y un identificador.
info = new wxInfoBar(this, idInfoBar);
Debido al modo en que se muestra la información en estos controles, que sólo son visibles cuando se requiere mostrar un mensaje, es conveniente usar un BoxSizer. Normalmente insertaremos estos controles al principio o al final de un sizer vertical, de modo que el resto de controles se reposicionen automáticamente cuando el control se muestre o se oculte.
Mostrar mensajes
Cuando queramos mostrar un mensaje en un control wxInfoBar usaremos el método ShowMessage, indicando como parámetros el texto del mensaje y una bandera que indica el grado de importancia del mensaje que, dependiendo de la plataforma, se indicará mediante un icono o con diferentes colores de fondo. Para ello se usan las mismas constantes que para los cuadros de mensaje:
- wxICON_NONE: si es posible no se mostrará ningún icono, o, en caso de que no se usen iconos, no se modifica el color del fondo.
- wxICON_ERROR: se muestra un icono de error, o se usa el color correspondiente al error, generalmente rojo.
- wxICON_WARNING: se muestra un icono de aviso, o se usa el color correspondiente al error, generalmente naranja.
- wxICON_QUESTION: se muestra un icono de pregunta, o se usa el color correspondiente al error, generalmente azul claro.
- wxICON_INFORMATION: se muestra un icono de información, o se usa el color correspondiente al error, generalmente azul oscuro.
info->ShowMessage(_T("Mensaje con icono de pregunta"), wxICON_QUESTION);
Botones
Por defecto, el control mostrará un único botón de "cerrar", pero podemos añadir nuestros propios botones mediante el método AddButton o eliminarlos mediante RemoveButton.
El primer botón que se añada sustituirá al botón de cerrar por defecto. De forma análoga, si se eliminan todos los botones añadidos, se mostrará le botón por defecto.
Por ese motivo, cuando se añaden botones es importante que al menos uno de ellos tenga por efecto la ocultación del control, es decir, el mismo comportamiento del botón por defecto, ya que de otro modo no se podrá ocultar el mensaje.
Esto se hace mediante el método Dismiss.
Estos controles no generan eventos propios, por lo que si queremos que nuestra aplicación procese las pulsaciones de los botones que añadamos deberemos vincularlos con sus respectivos métodos. Para ello se usa el método Bind, de la clase base wxEvtHandler.
info->AddButton(idSalir, _T("Salir")); info->Bind(wxEVT_BUTTON, &infobar::OnSalir, this, idSalir);
También deberemos tener cuidado a la hora de eliminar botones que hayamos añadido previamente, ya que sólo será posible eliminar botones existentes, y si intentamos eliminar uno que no existe se producirá un error.
Para averiguar si un botón está presente disponemos del método HasButtonId, que devolverá true si el botón con el identificador indicado existe.
if(info->HasButtonId(idSalir)) info->RemoveButton(idSalir);
Efectos
Disponemos de varias opciones de visualización a la hora de mostrar u ocultar estos controles. Puedes consultarlos en wxShowEffect.
Podemos eliminar cualquier efecto con el valor wxSHOW_EFFECT_NONE, usar uno de los efecto de enrollado, en cualquiera de las cuatro direcciones, LEFT, RIGHT, TOP o BOTTOM, con wxSHOW_EFFECT_ROLL_TO_XXX, uno de los efectos de desplazamiento, también en las cuatro direcciones, con wxSHOW_EFFECT_SLIDE_TO_XXX, un efecto de fundido, wxSHOW_EFFECT_BLEND o de expansión/colapso, con wxSHOW_EFFECT_EXPAND.
Para establecer los efectos que se usarán en un control se utiliza el método SetShowHideEffects, indicando como parámetros los efectos que queremos usar para mostrar y ocultar el control, respectivamente.
También se puede establecer el tiempo que dure la animación del efecto, mediante el método SetEffectDuration, indicando como parámetro el tiempo en milisegundos. El tiempo será igual para los dos efectos: mostrar y ocultar.
info->SetShowHideEffects(wxSHOW_EFFECT_EXPAND, wxSHOW_EFFECT_EXPAND); info->SetEffectDuration(1000);
Fuente
Otra opción disponible es cambiar la fuente utilizada para mostrar el texto del mensaje. Para ello utiliza el método wxInfoBar::SetFont, indicando como parámetro una referencia a un objeto wxFont.
Ejemplo 21
Windows:
Nombre | Fichero | Fecha | Tamaño | Contador | Descarga |
---|---|---|---|---|---|
Ejemplo 21 | wx021.zip | 2025-06-10 | 16233 bytes | 15 |
Linux:
Nombre | Fichero | Fecha | Tamaño | Contador | Descarga |
---|---|---|---|---|---|
Ejemplo 21 | wx021.tar.gz | 2025-06-10 | 2843 bytes | 9 |