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.
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