Compartir a través de


Intercambio de datos del cuadro de diálogo

Si usa el mecanismo DDX, establece los valores iniciales de las variables miembro del objeto de diálogo, normalmente en su OnInitDialog controlador o en el constructor del 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 propio cuadro de diálogo aparece en respuesta a DoModal o Create. La implementación predeterminada de OnInitDialog en CDialog llama a la UpdateData función miembro de la clase CWnd para inicializar los controles en el 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 cuando se llama a la UpdateData función miembro con el argumento TRUE). El mecanismo de validación de datos del cuadro de diálogo valida los elementos de datos para los que especificó reglas de validación.

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

Diagrama del modelo de datos y el intercambio de datos en pantalla.
Intercambio de datos del cuadro de diálogo

UpdateData funciona en ambas direcciones, tal como se especifica en el parámetro BOOL que se le ha pasado. 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 CDialog de DoDataExchange. DoDataExchange toma un argumento de tipo CDataExchange. El CDataExchange objeto pasado a UpdateData representa el contexto del intercambio, definiendo 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 según el contexto que proporciona el argumento CDataExchange, que es pasado a DoDataExchange por UpdateData.

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 DDX_ líneas 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 OnCancel función miembro finaliza el cuadro de diálogo y DoModal devuelve el valor IDCANCEL. En ese caso, no se intercambia ningún dato entre el cuadro de diálogo y el objeto 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