dialog.h

Clase wxDialog

Jerarquía:

Jerarquía de la clase wxDialog
Jerarquía de la clase wxDialog

Un cuadro de diálogo es una ventana con una barra de título y, a veces, un menú del sistema, que puede desplazarse por la pantalla.

Puede contener controles y otras ventanas y se utiliza a menudo para permitir al usuario hacer alguna elección o responder a una pregunta.

Los cuadros de diálogo pueden desplazarse automáticamente en ordenadores con pantallas de baja resolución: para más información, consultar Cuadros de diálogo con desplazamiento automático.

Los diálogos suelen contener un único botón que permite cerrar el diálogo o dos botones, uno que acepta los cambios y otro que los descarta (dicho botón, si está presente, se activa automáticamente si el usuario pulsa la tecla "Esc"). Por defecto, los botones con los identificadores estándar wxID_OK y wxID_CANCEL se comportan como se espera. A partir de wxWidgets 2.7 también es posible utilizar un botón con un identificador diferente en su lugar, ver SetAffirmativeId() y SetEscapeId().

Observese también que CreateButtonSizer() debe utilizarse para crear los botones apropiados para la plataforma actual y posicionarlos correctamente (incluyendo su orden, que depende de la plataforma).

Modales y no modales

Hay dos tipos de diálogo: modal y no modal. Un diálogo modal bloquea el flujo del programa y la entrada del usuario en otras ventanas hasta que es descartado, mientras que un diálogo no modal se comporta más como un marco en el que el flujo del programa continúa, y la entrada en otras ventanas sigue siendo posible. Para mostrar un diálogo modal debe utilizar el método ShowModal() mientras que para mostrar un diálogo no modal simplemente debe utilizar Show(), igual que con los marcos.

Hay que tener en cuenta que el diálogo modal es uno de los pocos ejemplos de objetos derivados de wxWindow que pueden ser creados en la pila y no en el montón. En otras palabras, mientras que la mayoría de las ventanas se crearían así:

void AskUser()
{
    MyAskDialog *dlg = new MyAskDialog(...);
    if ( dlg->ShowModal() == wxID_OK )
        // ...
    //else: dialog was cancelled or some another button pressed
 
    dlg->Destroy();
}

Se puede conseguir el mismo resultado con diálogos utilizando un código más sencillo:

void AskUser()
{
    MyAskDialog dlg(...);
    if ( dlg.ShowModal() == wxID_OK )
        // ...
 
    // no need to call Destroy() here
}

Una aplicación puede definir un manipulador wxCloseEvent para que el diálogo responda a los eventos de cierre del sistema.

Estilos

Esta clase admite los siguientes estilos:

wxCAPTION:
Pone una leyenda en el cuadro de diálogo.
wxDEFAULT_DIALOG_STYLE:
Equivale a una combinación de wxCAPTION, wxCLOSE_BOX y wxSYSTEM_MENU (este último no se utiliza en Unix).
wxRESIZE_BORDER:
Muestra un marco redimensionable alrededor de la ventana.
wxSYSTEM_MENU:
Muestra un menú de sistema.
wxCLOSE_BOX:
Muestra un cuadro de cierre en el marco.
wxMAXIMIZE_BOX:
Muestra una caja de maximizar en el cuadro de diálogo.
wxMINIMIZE_BOX:
Muestra una caja de minimización en el diálogo.
wxTHICK_FRAME:
Muestra un marco grueso alrededor de la ventana.
wxSTAY_ON_TOP:
El diálogo permanece encima de todas las demás ventanas.
wxNO_3D:
Este estilo está obsoleto y ya no hace nada, no se debe usar en ningún código nuevo.
wxDIALOG_NO_PARENT:
Por defecto, a un diálogo creado con una ventana padre NULL se le dará como padre la ventana de nivel superior de la aplicación. Utilice este estilo para evitar que esto ocurra y crear un diálogo huérfano. Esto no es recomendable para diálogos modales.
wxDIALOG_EX_CONTEXTHELP:
En Windows, pone un botón de consulta en el título. Cuando se pulsa, Windows entrará en un modo de ayuda sensible al contexto y wxWidgets enviará un evento wxEVT_HELP si el usuario hizo clic en una ventana de la aplicación. Hay que tener en cuenta que este es un estilo extendido y debe establecerse llamando a SetExtraStyle() antes de llamar a Create (construcción en dos pasos).
wxDIALOG_EX_METAL:
En macOS, los marcos con este estilo se mostrarán con un aspecto metálico. Este es un estilo extra.

En Unix o Linux, MWM (el Motif Window Manager) u otros gestores de ventanas que reconozcan las sugerencias de MHM deben estar ejecutándose para que cualquiera de estos estilos tenga efecto.

Eventos emitidos por esta clase

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

void handlerFuncName(wxCloseEvent& event)

Macros de eventos para eventos emitidos por esta clase:

EVT_CLOSE(func):
El diálogo está siendo cerrado por el usuario o mediante programación (ver wxWindow::Close). El usuario puede generar este evento pulsando el botón de cierre (normalmente la 'X' en la parte superior derecha de la barra de título) si está presente (ver el estilo wxCLOSE_BOX).
EVT_INIT_DIALOG(func):
Procesa un evento wxEVT_INIT_DIALOG. Ver wxInitDialogEvent.

Funciones miembro públicas

wxDialog()

wxDialog::wxDialog()

Constructor por defecto.

wxDialog()

wxDialog::wxDialog( wxWindow * parent, wxWindowID id, const wxString & title, const wxPoint & pos = wxDefaultPosition, const wxSize & size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString & name = wxDialogNameStr )

Constructor.

Parámetros
parent
Puede ser NULL, un marco u otro cuadro de diálogo.
id
Un identificador para el cuadro de diálogo. Un valor de -1 se toma por defecto.
title
El título del diálogo.
pos
La posición del diálogo. El valor wxDefaultPosition indica una posición por defecto, elegida por el sistema de ventanas o por wxWidgets, dependiendo de la plataforma.
size
El tamaño del diálogo. El valor wxDefaultSize indica el tamaño por defecto, elegido por el sistema de ventanas o por wxWidgets, dependiendo de la plataforma.
style
El estilo de la ventana.
name
Se utiliza para asociar un nombre a la ventana, permitiendo al usuario de la aplicación establecer valores de recursos Motif para cuadros de diálogo individuales.
Ver también

Creater().

~wxDialog()

virtual wxDialog::~wxDialog()

Destructor.

Borra cualquier ventana hija antes de borrar la ventana física.

AddMainButtonId()

void wxDialog::AddMainButtonId(wxWindowID id)

Añade un identificador que se considerará botón principal para la zona no desplazable de un cuadro de diálogo.

CanDoLayoutAdaptation()

virtual bool wxDialog::CanDoLayoutAdaptation ()

Devuelve true si este diálogo puede y debe realizar la adaptación del diseño utilizando DoLayoutAdaptation(), normalmente si el diálogo es demasiado grande para caber en la pantalla.

Centre()

void wxDialog::Centre(int direction = wxBOTH)

Centra el cuadro de diálogo en la pantalla.

Parámetros
direction
Puede ser wxHORIZONTAL, wxVERTICAL o wxBOTH.
Create()

bool wxDialog::Create( wxWindow * parent, wxWindowID id, const wxString & title, const wxPoint & pos = wxDefaultPosition, const wxSize & size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE, const wxString & name = wxDialogNameStr )

Se utiliza para la construcción de cuadros de diálogo en dos pasos.

Ver wxDialog.

CreateButtonSizer()

wxSizer* wxDialog::CreateButtonSizer(long flags)

Crea un sizer con botones estándar.

flags es una lista de bits de los siguientes flags: wxOK, wxCANCEL, wxYES, wxNO, wxAPPLY, wxCLOSE, wxHELP, wxNO_DEFAULT.

El tamaño de los botones se adapta a la plataforma.

Esta función utiliza CreateStdDialogButtonSizer() internamente para la mayoría de las plataformas pero no crea el sizer en absoluto para las plataformas con botones hardware (como los smartphones) para las que configura los botones hardware apropiadamente y devuelve NULL, así que no se debe olvidar comprobar que el valor de retorno es válido antes de utilizarlo.

CreateSeparatedButtonSizer()

wxSizer* wxDialog::CreateSeparatedButtonSizer(long flags)

Crea un sizer con botones estándar mediante CreateButtonSizer() separados del resto del contenido del diálogo por una wxStaticLine horizontal.

Nota: Al igual que CreateButtonSizer(), esta función puede devolver NULL si no se han creado botones.

Se trata de una combinación de CreateButtonSizer() y CreateSeparatedSizer().

CreateSeparatedSizer()

wxSizer* wxDialog::CreateSeparatedSizer(wxSizer * sizer)

Devuelve el sizer que contiene el dado con un wxStaticLine de separación si es necesario.

Esta función es útil para crear el sizer que contiene contenidos tipo pie de página en cuadros de diálogo. Añadirá una línea estática de separación sólo si se ajusta a la convención de la plataforma actual (actualmente no se añade en Mac donde se desaconseja el uso de líneas estáticas para agrupar y se añade en otro lugar).

Parámetros
sizer
El sizer a envolver, debe ser no NULL.
Valor de retorno

El sizer que envuelve al de entrada o posiblemente el propio sizer de entrada si no es necesario envolverlo.

CreateStdDialogButtonSizer()

wxStdDialogButtonSizer* wxDialog::CreateStdDialogButtonSizer(long flags)

Crea un wxStdDialogButtonSizercon botones estándar.

flags es una lista de bits de los siguientes flags: wxOK, wxCANCEL, wxYES, wxNO, wxAPPLY, wxCLOSE, wxHELP, wxNO_DEFAULT.

El tamaño de los botones se adapta a la plataforma.

CreateTextSizer()

wxSizer* wxDialog::CreateTextSizer( const wxString & message, int widthMax = -1 )

Divide el texto en nuevas líneas y coloca las líneas en objetos wxStaticText con la anchura máxima especificada en un wxBoxSizer vertical.

Si widthMax tiene su valor por defecto de -1, solo se tienen en cuenta los caracteres explícitos de nueva línea en el mensaje. De lo contrario, las líneas se rompen después de una nueva línea o se envuelven, en el límite de la palabra, si su anchura fuera mayor que la anchura máxima especificada.

Parámetros
mensaje
El texto que se va a mostrar.
widthMax
Especifica la anchura máxima del texto (este argumento está disponible desde la versión 3.1.1, las versiones anteriores siempre se comportaban como si se especificara la anchura máxima de -1).
Ver también

wxStaticText::Wrap(int width).

DoLayoutAdaptation()

virtual bool wxDialog::DoLayoutAdaptation()

Realiza la adaptación del diseño, normalmente si el diálogo es demasiado grande para caber en la pantalla.

EndModal()

virtual void wxDialog::EndModal(int retCode)

Finaliza un diálogo modal, pasando un valor a devolver desde la invocación ShowModal().

Parámetros
retCode
El valor que debe devolver ShowModal.
Ver también

ShowModal(), GetReturnCode(), SetReturnCode()

GetAffirmativeId()

int wxDialog::GetAffirmativeId() const

Obtiene el identificador del botón que funciona como botón OK estándar en este diálogo.

Ver también

SetAffirmativeId().

GetContentWindow()

virtual wxWindow* wxDialog::GetContentWindow() const

Sobreescrir este método para devolver una ventana que contenga el contenido principal del diálogo.

Esto es particularmente útil cuando el diálogo implementa páginas, como wxPropertySheetDialog, y permite que el código de adaptación del diseño sepa que solo las páginas necesitan ser desplazables.

Reimplementado en wxPropertySheetDialog.

GetEscapeId()

int wxDialog::GetEscapeId() const

Obtiene el identificador del botón al que se asignan las pulsaciones del botón ESC.

Ver también

SetEscapeId().

GetLayoutAdaptationDone()

bool wxDialog::GetLayoutAdaptationDone() const

Devuelve true si el diálogo ha sido adaptado, normalmente haciéndolo desplazable para trabajar con una pantalla pequeña.

GetLayoutAdaptationLevel()

int wxDialog::GetLayoutAdaptationLevel() const

Obtiene un valor que representa la agresividad de la búsqueda de botones y selectores en la parte no desplazable de un diálogo adaptado.

Cero desactiva la adaptación, y 3 permite la búsqueda de botones estándar en cualquier parte del diálogo.

GetLayoutAdaptationMode()

wxDialogLayoutAdaptationMode wxDialog::GetLayoutAdaptationMode() const

Obtiene el modo de adaptación, anulando la bandera de adaptación global.

GetMainButtonIds()

wxArrayInt& wxDialog::GetMainButtonIds()

Devuelve una matriz de identificadores que se considerarán los botones principales de la zona no desplazable de un cuadro de diálogo.

GetReturnCode()

int wxDialog::GetReturnCode() const

Obtiene el código de retorno de esta ventana.

Observaciones

Un código de retorno está normalmente asociado a un diálogo modal, donde ShowModal() devuelve un código a la aplicación.

Ver también

SetReturnCode(), ShowModal(), EndModal().

GetToolBar()

wxToolBar* wxDialog::GetToolBar() const

En PocketPC, se proporciona automáticamente un cuadro de diálogo con una barra de herramientas vacía.

Esta función permite acceder a la barra de herramientas y añadirle herramientas. Actualmente no es posible eliminar herramientas ni añadir controles arbitrarios.

Esta función no está disponible en ninguna otra plataforma.

Disponibilidad: solo disponible para la versión wxMSW.

Iconize()

virtual void wxDialog::Iconize(bool iconize = true)

Iconiza o restaura el diálogo.

Sólo para Windows.

Parámetros
iconize
Si es true, iconiza el cuadro de diálogo; si es false, lo muestra y lo restaura.
Observaciones

Hay que tener en cuenta que en Windows, la iconización no tiene ningún efecto, ya que los cuadros de diálogo no se pueden iconizar. Sin embargo, las aplicaciones pueden necesitar restaurar explícitamente los cuadros de diálogo en Motif que tienen marcos iconizables por el usuario, y en Windows llamar a Iconize(false) traerá la ventana al frente, al igual que Show(true).

Reimplementado de wxTopLevelWindow.

IsIconized()

virtual bool wxDialog::IsIconized() const

Devuelve true si el cuadro de diálogo está iconizado.

Solo para Windows.

Observaciones

Siempre devuelve false bajo Windows ya que los cuadros de diálogo no pueden ser iconizados.

Reimplementado de wxTopLevelWindow.

IsMainButtonId()

bool wxDialog::IsMainButtonId(wxWindowID id) const

Devuelve true si id está en el array de identificadores a considerar como botones principales para el área no desplazable de un diálogo.

Disponibilidad: sólo disponible para la versión wxMSW.

IsModal()

virtual bool wxDialog::IsModal() const

Devuelve true si el cuadro de diálogo es modal, false en caso contrario.

SetAffirmativeId()

void wxDialog::SetAffirmativeId(int id)

Establece el identificador que se utilizará como botón Aceptar.

Cuando se pulsa el botón con este identificador, el diálogo llama a wxWindow::Validate() y a wxWindow::TransferDataFromWindow() y, si ambos devuelven verdadero, cierra el diálogo con el código de retorno del identificador afirmativo.

Además, cuando el usuario pulsa un botón hardware OK en los dispositivos que disponen de uno o el botón especial OK en la barra de título de PocketPC, se genera un evento con este id.

Por defecto, el id afirmativo es wxID_OK.

Ver también

GetAffirmativeId(), SetEscapeId().

SetEscapeId()

void wxDialog::SetEscapeId(int id)

Establece el identificador del botón que debería funcionar como el botón "Cancelar" estándar en este diálogo.

Cuando se pulsa el botón con este identificador, se cierra el diálogo. Además, cuando el usuario pulsa la tecla ESC en el diálogo o cierra el diálogo utilizando el botón cerrar en la barra de título, esto se asigna al clic del botón con el id especificado.

Por defecto, el id de escape es el valor especial wxID_ANY lo que significa que se utiliza el botón wxID_CANCEL si está presente en el diálogo y en caso contrario se utiliza el botón con GetAffirmativeId(). Otro valor especial para id es wxID_NONE que significa que las pulsaciones ESC deben ser ignoradas. Si se da cualquier otro valor, se interpreta como el id del botón al que asignar la tecla de escape.

Nota: Este método debe utilizarse para diálogos modales personalizados implementados en el propio wxWidgets, los diálogos nativos como wxMessageDialog o wxFileDialog, manejan las pulsaciones ESC de su propia manera que no puede ser personalizada.

SetIcon()

void wxDialog::SetIcon(const wxIcon & icon)

Establece el icono de este diálogo.

Parámetros
icon
El icono que se asociará a este diálogo.
SetIcons()

void wxDialog::SetIcons(const wxIconBundle & icons)

Establece los iconos de este diálogo.

Parámetros
icons
Los iconos a asociar con este diálogo.
SetLayoutAdaptationDone()

void wxDialog::SetLayoutAdaptationDone(bool done)

Marca el diálogo como adaptado, normalmente haciéndolo desplazable para trabajar con una pantalla pequeña.

SetLayoutAdaptationLevel()

void wxDialog::SetLayoutAdaptationLevel(int level)

Establece la agresividad de la búsqueda de botones y medidores en la parte no desplazable de un diálogo adaptado al diseño.

Cero desactiva la adaptación, y 3 permite la búsqueda de botones estándar en cualquier parte del diálogo.

SetLayoutAdaptationMode()

void wxDialog::SetLayoutAdaptationMode(wxDialogLayoutAdaptationMode mode)

Establece el modo de adaptación, anulando la bandera de adaptación global.

SetReturnCode()

void wxDialog::SetReturnCode(int retCode)

Establece el código de retorno para esta ventana.

Un código de retorno se asocia normalmente con un diálogo modal, donde ShowModal() devuelve un código a la aplicación. La función EndModal() llama a SetReturnCode().

Parámetros
retCode
El código de retorno entero, normalmente un identificador de control.
Ver también

GetReturnCode(), ShowModal(), EndModal().

Show()

virtual bool wxDialog::Show(bool show = true)

Oculta o muestra el diálogo.

La forma preferida de cerrar un diálogo modal es utilizar EndModal().

Parámetros
show
Si es true, el cuadro de diálogo se muestra y se trae al frente, de lo contrario el cuadro se oculta. Si es false y el diálogo es modal, el control se devuelve al programa que lo llama.

Reimplementado de wxWindow.

ShowModal()

virtual int wxDialog::ShowModal()

Muestra un diálogo modal de aplicación.

El flujo del programa no vuelve hasta que el diálogo ha sido cerrado con EndModal().

Obsérvese que es posible llamar a ShowModal() para un diálogo que ha sido mostrado previamente con Show(), esto permite hacer modal un diálogo no modal existente. Sin embargo ShowModal() no puede ser llamada dos veces sin que intervenga EndModal().

Hay que tener en cuenta que esta función crea un bucle de eventos temporal que tiene prioridad sobre el bucle de eventos principal de la aplicación (véase wxEventLoopBase) y que se destruye cuando se cierra el diálogo. Esto también resulta en una llamada a wxApp::ProcessPendingEvents().

Valor de retorno

El valor establecido con SetReturnCode().

Ver también

ShowWindowModal(), ShowWindowModalThenDo(), EndModal(), GetReturnCode(), SetReturnCode().

Reimplementado en wxTextEntryDialog, wxclass/wxMessageDialog, wxFontDialog, wxFileDialog, wxDirDialog, wxColourDialog, wxSingleChoiceDialog y wxMultiChoiceDialog.

ShowWindowModal()

void wxDialog::ShowWindowModal()

Muestra un diálogo modal solo a la ventana de nivel superior padre.

A diferencia de ShowModal(), los diálogos mostrados con esta función solo impiden al usuario interactuar con su marco padre pero no con el resto de la aplicación. Tampoco bloquean la ejecución del programa, sino que vuelven inmediatamente, como Show(), y generan un evento wxEVT_WINDOW_MODAL_DIALOG_CLOSED (wxWindowModalDialogEvent) más tarde, cuando se cierra el diálogo.

Actualmente esta función sólo está completamente implementada en las versiones de wxOSX, en el resto de plataformas se comporta como ShowModal() (pero también envía el evento mencionado).

Ver también

wxWindowModalDialogEvent, ShowWindowModalThenDo().

ShowWindowModalThenDo()

template<typename Functor> void wxDialog::ShowWindowModalThenDo(const Functor & onEndModal)

Muestra un diálogo modal solo a la ventana de nivel superior padre y llama a un functor después de que se cierre el diálogo.

Igual que la otra sobrecarga ShowWindowModal(), pero llama al functor pasado como argumento al finalizar, en lugar de generar el evento wxEVT_WINDOW_MODAL_DIALOG_CLOSED.

Esta forma es particularmente útil en combinación con las lambdas de C++11, cuando permite escribir ventana-modal de forma muy similar a como se utiliza ShowModal() (con la notable excepción de no poder crear el diálogo en la pila):

wxWindowPtr<wxDialog> dlg(new wxMessageDialog(this, "¡Hola!"));
 
dlg->ShowWindowModalThenDo([this,dlg](int retcode){
    if ( retcode == wxID_OK )
        DoSomething();
    // dlg se destruye implícitamente aquí, porque el puntero fue
    // capturado explícitamente por la lambda
});
Parámetros
onEndModal
Objeto función a llamar cuando se cierra el diálogo. El functor es llamado con un único argumento entero, el código de retorno del diálogo.

Nota: La instancia del diálogo no debe ser destruida hasta que se llame a onEndModal. La mejor forma de asegurarse de ello es utilizar wxWindowPtr para mantener un puntero e incluirlo en la captura de la lambda, por valor (¡no por referencia!), como se muestra en el ejemplo anterior.

Funciones miembro estáticas

EnableLayoutAdaptation()

static void wxDialog::EnableLayoutAdaptation(bool enable)

Función estática que habilita o deshabilita la adaptación del diseño para todos los diálogos.

GetLayoutAdapter()

static wxDialogLayoutAdapter* wxDialog::GetLayoutAdapter()

Función estática que obtiene el objeto adaptador de diseño actual.

IsLayoutAdaptationEnabled()

static bool wxDialog::IsLayoutAdaptationEnabled()

Una función estática que devuelve true si la adaptación del diseño está habilitada para todos los diálogos.

SetLayoutAdapter()

static wxDialogLayoutAdapter* wxDialog::SetLayoutAdapter(wxDialogLayoutAdapter * adapter)

Una función estática para establecer el objeto adaptador de diseño actual, devolviendo el adaptador antiguo.

Si llama a esta función, debe eliminar el objeto adaptador antiguo.

Métodos y datos heredados

Esta clase hereda los métodos y datos miembro públicos y protegidos de wxTopLevelWindow, wxWindow, wxEvtHandler y wxObject.