Clase wxStaticBox
Una caja estática es un rectángulo dibujado alrededor de otras ventanas para denotar una agrupación lógica de elementos.
Jerarquía:

Hay que tener en cuenta que mientras que las versiones anteriores requerían que las ventanas que aparecieran dentro de una caja estática fueran creadas como sus hermanos (es decir, que usaran el mismo padre que la propia caja estática), desde wxWidgets 2.9.1 es posible crearlas como hijas de la propia wxStaticBox y hacer esto es muy recomendable y evita varios problemas de repintado diferentes que podrían ocurrir al crear las otras ventanas como hermanos de la caja.
Así que la forma recomendada para crear la caja estática y los controles dentro de ella es:
void MyFrame::CreateControls() { wxPanel *panel = new wxPanel(this); wxStaticBox *box = new wxStaticBox(panel, wxID_ANY, "StaticBox"); new wxStaticText(box, wxID_ANY, "This window is a child of the staticbox"); ... }
Crear las ventanas con la caja estática padre (es decir, el panel en el ejemplo anterior) como padre sigue funcionando, pero puede dar lugar a problemas de actualización y repintado.
También hay que tener en cuenta que hay una clase especializada wxSizer(wxStaticBoxSizer) que se puede utilizar como una forma más fácil de empaquetar elementos en una caja estática.
Funciones miembro
wxStaticBox()
wxStaticBox::wxStaticBox()
Constructor por defecto.
wxStaticBox()
wxStaticBox::wxStaticBox( wxWindow * parent, wxWindowID id, const wxString & label, const wxPoint & pos = wxDefaultPosition, const wxSize & size = wxDefaultSize, long style = 0, const wxString & name = wxStaticBoxNameStr )
Constructor, crea y muestra una caja estática.
Parámetros
- parent
- Ventana padre. No debe ser NULL.
- id
- Identificador de la ventana. El valor wxID_ANY indica un valor por defecto.
- label
- Texto a mostrar en la caja estática, o una cadena vacía para ninguna etiqueta.
- pos
- Posición de la ventana. Si se especifica wxDefaultPosition se elige una posición por defecto.
- size
- Tamaño de la caja. Si se especifica wxDefaultSize se elige un tamaño por defecto.
- style
- Estilo de la ventana. No hay estilos específicos para wxStaticBox, pero los estilos genéricos wxALIGN_LEFT, wxALIGN_CENTRE_HORIZONTAL y wxALIGN_RIGHT se pueden utilizar aquí para cambiar la posición de la etiqueta de la caja estática cuando se utiliza wxGTK (estos estilos se ignoran actualmente en otras plataformas).
- name
- Nombre de la ventana.
wxStaticBox()
wxStaticBox::wxStaticBox( wxWindow * parent, wxWindowID id, wxWindow * label, const wxPoint & pos = wxDefaultPosition, const wxSize & size = wxDefaultSize, long style = 0, const wxString & name = wxStaticBoxNameStr )
Constructor para una caja estática que utiliza la ventana dada como etiqueta.
Este constructor toma un puntero a una ventana arbitraria (aunque normalmente es un wxCheckBox o un wxRadioButton) en lugar de la etiqueta de texto habitual y coloca esta ventana en la parte superior de la caja en el lugar donde se mostraría la etiqueta.
La ventana de la etiqueta debe ser una ventana no nula, completamente creada y se convertirá en hija de este wxStaticBox, es decir, será propiedad de este control y se borrará cuando se borre el propio wxStaticBox.
Un ejemplo de creación de un wxStaticBox con window como etiqueta:
void MyFrame::CreateControls() { wxPanel* panel = new wxPanel(this); wxCheckBox* checkbox = new wxCheckBox(panel, wxID_ANY, "Box checkbox"); wxStaticBox* box = new wxStaticBox(panel, wxID_ANY, checkbox); ... }
Actualmente este constructor solo está disponible en wxGTK y wxMSW, utilizar wxHAS_WINDOW_LABEL_IN_STATIC_BOX para comprobar si se puede utilizar en tiempo de compilación.
~wxStaticBox()
virtual wxStaticBox::~wxStaticBox()
Destructor, destruye la caja de grupo.
Create()
bool wxStaticBox::Create( wxWindow * parent, wxWindowID id, const wxString & label, const wxPoint & pos = wxDefaultPosition, const wxSize & size = wxDefaultSize, long style = 0, const wxString & name = wxStaticBoxNameStr )
Crea la caja estática para la construcción en dos pasos.
Create()
bool wxStaticBox::Create( wxWindow * parent, wxWindowID id, wxWindow * label, const wxPoint & pos = wxDefaultPosition, const wxSize & size = wxDefaultSize, long style = 0, const wxString & name = wxStaticBoxNameStr )
Crea la caja estática con la ventana como etiqueta.
Este método solo puede ser llamado para un objeto creado usando su constructor por defecto.
Consultar la documentación del constructor para más detalles.
Actualmente esta sobrecarga solo está disponible en wxGTK y wxMSW, utilice wxHAS_WINDOW_LABEL_IN_STATIC_BOX para comprobar si se puede utilizar en tiempo de compilación.
Enable()
virtual bool wxStaticBox::Enable(bool enable = true)
Habilita o deshabilita la caja sin afectar a su ventana de etiqueta, si la tiene.
wxStaticBox anula wxWindow::Enable() para evitar deshabilitar el control utilizado como etiqueta, si esta caja está utilizando uno. Esto se hace para permitir utilizar una etiqueta wxCheckBox, por ejemplo, y habilitar o deshabilitar la caja según el estado de la casilla de verificación: si deshabilitar la caja también deshabilitara la casilla de verificación en esta situación, haría imposible para el usuario volver a habilitar la caja después de deshabilitarla, por lo que la casilla de verificación permanece habilitada incluso si se llama a box->Enable(false).
Sin embargo con el comportamiento actual, implementado en este método anulado, el siguiente código (mostrado usando C++11 solo por conveniencia, este comportamiento no es específico de C++11):
auto check = new wxCheckBox(parent, wxID_ANY, "Use the box"); auto box = new wxStaticBox(parent, wxID_ANY, check); check->Bind(wxEVT_CHECKBOX, [box](wxCommandEvent& event) { box->Enable(event.IsChecked()); });
funciona como se esperaba.
Hay que tener en cuenta que anular Enable() para no desactivar esta ventana tiene dos consecuencias posiblemente inesperadas:
- La caja retiene su estado habilitado, es decir, IsEnabled() sigue devolviendo true, después de llamar a Enable(false).
- Los hijos de la caja se habilitan o deshabilitan cuando la caja lo está, lo que puede provocar la pérdida de su estado original. Por ejemplo, si una caja hija está inicialmente deshabilitada, luego la propia caja se deshabilita y, finalmente, la caja se habilita de nuevo, esta caja hija acabará habilitándose también (esto no ocurriría con ninguna otra ventana padre, ya que sus hijos heredarían el estado deshabilitado de la ventana padre en lugar de deshabilitarse realmente cuando ésta se deshabilita). Para evitar este problema, considerar el uso de wxEVT_UPDATE_UI para asegurarse de que el estado del hijo es siempre correcto o restaurarlo manualmente después de volver a habilitar el cuadro.
Reimplementado de wxWindow.
Métodos y datos heredados
Esta clase hereda los métodos y datos miembro públicos y protegidos de wxObject, wxEvtHandler, wxWindow y wxControl.