Programación con Herramientas Visuales Clase 11: Ventanas de Diálogo Viernes, 24 de Enero de 2003 Iván Bernal, Ph.D. imbernal@mailfie.epn.edu.ec http:// http ://wwwfie.epn.edu.ec wwwfie.epn.edu.ec//ibernal Escuela Politécnica Nacional Quito – Ecuador Copyright @2003, I. Bernal Agenda • Ventanas de Diálogo Modales. Dic. 02 – Abril 03 PHV Iván Bernal, Ph.D Ph.D.. http:// http ://wwwfie.epn.edu.ec wwwfie.epn.edu.ec//ibernal Escuela Politécnica Nacional Quito - Ecuador 2 Ventanas de Diálogo Modales(1) • Interacción con el usuario. – Puede ser una simple o compleja “forma”, para conseguir información del usuario. – Es una ventana que recibe mensajes y que puede moverse y cerrarse y en la que puede dibujarse. • Tipos: – Modal (modal). • El usuario no puede trabajar en otro lugar en la misma aplicación hasta que se cierre la ventana de diálogo. • Más fáciles de programar. – No Modal (modeless). • El usuario puede trabajar en otra ventana así la ventana de diálogo permanece en pantalla. – Ambos tipos se derivan de CDialog. Dic. 02 – Abril 03 PHV Iván Bernal, Ph.D Ph.D.. http:// http ://wwwfie.epn.edu.ec wwwfie.epn.edu.ec//ibernal Escuela Politécnica Nacional Quito - Ecuador 3 Ventanas de Diálogo Modales(2) • La mayoría de veces, una ventana de diálogo está asociada a un recurso que identifica sus elementos y su distribución geométrica dentro de la ventana. • Un ventana de diálogo contiene controles. – “Edit”: cajas de texto. – Botones. – Listas. – – – – Combos (Caja de texto mas una lista). Cajas de texto estático: etiquetas. Vista en forma de árbol (tree view). Indicadores de progreso. Dic. 02 – Abril 03 PHV Iván Bernal, Ph.D Ph.D.. http:// http ://wwwfie.epn.edu.ec wwwfie.epn.edu.ec//ibernal Escuela Politécnica Nacional Quito - Ecuador 4 Ventanas de Diálogo Modales(3) • Windows administra los controles agrupándolos y definiendo una lógica de tabulación (Tab). • Se puede acceder a los controles del diálogo mediante punteros a objetos CWnd, o usando un índice ó ID. • Un control envía mensajes a su ventana padre (diálogo) en respuesta a una acción del usuario sobre el control. • MFC y ClassWizard mejoran la lógica de Windows: – Generación de una clase derivada de CDialog y adición de variables en esta clase derivada para los controles utilizados. – Generación de código para el intercambio de datos (bidireccional) entre los controles y las variables miembro, así como validación de los datos. Dic. 02 – Abril 03 PHV Iván Bernal, Ph.D Ph.D.. http:// http ://wwwfie.epn.edu.ec wwwfie.epn.edu.ec//ibernal Escuela Politécnica Nacional Quito - Ecuador 5 Ventanas de Diálogo Modales(4) • Pasos para añadir una ventana de diálogo: – Crear la ventana de diálogo con el editor de recursos y agregar controles. – Crear una clase asociada derivada de CDialog. – Añadir miembros dato, funciones de intercambio y validación con ClassWizard. – Agregar con ClassWizard manipuladores de mensajes para eventos asociados a ciertos controles. – Agregar el código de inicialización en la función OnInitDialog y el necesario en los manipuladores. • La función virtual OnOK se llama de forma automática, a menos que el usuario cancele la operación. – Escribir el código necesario para activar la ventan de diálogo. • Podría ser en la vista. Dic. 02 – Abril 03 PHV Iván Bernal, Ph.D Ph.D.. http:// http ://wwwfie.epn.edu.ec wwwfie.epn.edu.ec//ibernal Escuela Politécnica Nacional Quito - Ecuador 6 Tabulación (1) Orden de Tabulación (Tecla Tab) Dic. 02 – Abril 03 PHV Iván Bernal, Ph.D Ph.D.. http:// http ://wwwfie.epn.edu.ec wwwfie.epn.edu.ec//ibernal Escuela Politécnica Nacional Quito - Ecuador 7 Tabulación (2) Dic. 02 – Abril 03 PHV Iván Bernal, Ph.D Ph.D.. http:// http ://wwwfie.epn.edu.ec wwwfie.epn.edu.ec//ibernal Escuela Politécnica Nacional Quito - Ecuador 8 Agrupamiento (1) • La selección de “Group”, marca el inicio de un grupo de controles, en el cual el usuario puede moverse de un control a otro con las teclas de las “flechas”. – Todos los controles en el orden de tabulación luego del primer control con la propiedad de “Group” seleccionada a “False” pertenece al mismo grupo. – El siguiente control in el orden de tabulación con la propiedad de “Group” seleccionada a “True” finaliza el primer grupo y empieza el siguiente grupo. Dic. 02 – Abril 03 PHV Iván Bernal, Ph.D Ph.D.. http:// http ://wwwfie.epn.edu.ec wwwfie.epn.edu.ec//ibernal Escuela Politécnica Nacional Quito - Ecuador 9 Flujo de datos (1) • • El valor de las variables miembro son actualizadas solamente después que la ventana de diálogo se cierra. Se desea que al presionar el botón de copiar, lo que el usuario ingrese en la ventana de edición superior se copia a la segunda ventana. – La primera versión de código no funciona. – El valor de la variable m_strOriginal, tipo CString, no está actualizada. – La segunda versión actualiza las variables con UpdateData(TRUE ) y luego se usa m_strOriginal para asignar a m_strReceptor. Debo actualizar ahora el valor del control asociado a m_strReceptor con UpdateData(FALSE) . Dic. 02 – Abril 03 PHV Iván Bernal, Ph.D Ph.D.. http:// http ://wwwfie.epn.edu.ec wwwfie.epn.edu.ec//ibernal Escuela Politécnica Nacional Quito - Ecuador 10 Flujo de datos (1) • Otra opción: – Definir variables basadas en controles directamente. Dic. 02 – Abril 03 PHV Iván Bernal, Ph.D Ph.D.. http:// http ://wwwfie.epn.edu.ec wwwfie.epn.edu.ec//ibernal Escuela Politécnica Nacional Quito - Ecuador 11