Intercambio de datos de cuadro de diálogo

Si usa el mecanismo DDX (intercambio de datos de cuadro de diálogo), debe establecer los valores iniciales de las variables miembro del objeto de cuadro de diálogo, normalmente en el controlador OnInitDialog o en el constructor del cuadro de diálogo. Inmediatamente antes de que se muestre el cuadro de diálogo, el mecanismo DDX del marco transfiere los valores de las variables miembro a los controles del cuadro de diálogo, donde aparecen cuando el cuadro de diálogo aparece en respuesta a DoModal o Create. La implementación predeterminada de OnInitDialog en CDialog llama a la función miembro UpdateData de la clase CWnd para inicializar los controles del cuadro de diálogo.

El mismo mecanismo transfiere valores de los controles a las variables miembro cuando el usuario hace clic en el botón Aceptar (o cada vez que se llama a la función miembro UpdateData con el argumento TRUE). El mecanismo de validación de datos de cuadro de diálogo valida los elementos de datos para los que se especificaron reglas de validación.

En la ilustración siguiente se muestra el intercambio de datos de cuadro de diálogo.

Diagram of data model and on screen dialog box data exchange.
Intercambio de datos de cuadro de diálogo

UpdateData funciona en ambas direcciones, según lo que especifica el parámetro BOOL que se le pasa. Para llevar a cabo el intercambio, UpdateData configura un objeto CDataExchange y llama a la invalidación de la clase del cuadro de diálogo de la función miembro DoDataExchange de CDialog. DoDataExchange toma un argumento de tipo CDataExchange. El objeto CDataExchange que se pasa a UpdateData representa el contexto del intercambio y define dicha información como la dirección del intercambio.

Si usted (o un Asistente para código) invalida DoDataExchange, debe especificar una llamada a una función DDX por miembro de datos (control). Cada función DDX sabe cómo intercambiar datos en ambas direcciones en función del contexto proporcionado por el argumento CDataExchange que UpdateData pasa a DoDataExchange.

MFC proporciona muchas funciones DDX para diferentes tipos de intercambio. En el ejemplo siguiente se muestra una invalidación de DoDataExchange en la que se llama a dos funciones DDX y una función DDV:

void CTestDialog::DoDataExchange(CDataExchange* pDX)
{
   CDialog::DoDataExchange(pDX);
   DDX_Check(pDX, IDC_MY_CHECKBOX, m_bVal);
   DDX_Text(pDX, IDC_MY_TEXTBOX, m_strName);
   DDV_MaxChars(pDX, m_strName, 20);
}

Las líneas DDX_ y DDV_ son un mapa de datos. Las funciones DDX y DDV de ejemplo que se muestran son para un control de casilla y un control de cuadro de edición, respectivamente.

Si el usuario cancela un cuadro de diálogo modal, la función miembro OnCancel finaliza el cuadro de diálogo y DoModal devuelve el valor IDCANCEL. En ese caso, no se intercambian datos entre el cuadro de diálogo y el objeto de cuadro de diálogo.

Consulte también

Intercambio y validación de datos de cuadros de diálogo
Trabajar con cuadros de diálogo en MFC
Validación de datos de cuadro de diálogo