PDF de programación - Apunte de VC++ 6 - Capítulo V

Imágen de pdf Apunte de VC++ 6 - Capítulo V

Apunte de VC++ 6 - Capítulo Vgráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 7 de Febrero del 2018)
689 visualizaciones desde el 7 de Febrero del 2018
212,8 KB
6 paginas
Creado hace 7a (21/11/2016)
Apunte de Visual C++

 

Por: Demian Panello        [email protected]
         
Capítulo V
Indice rápido del capítulo 5:

Agregar nuevos Diálogos.
Crear una clase para un nuevo diálogo.
Agregar línea #include en un archivo de implementación para un nuevo diálogo.
Diálogos Modales y No Modales.
Llamar un diálogo de forma modal.
Puntero this.
Función EndDialog().
Llamar a un diálogo de forma no modal.

 

 

DIALOGOS MODALES Y NO MODALES:

Hasta ahora hemos visto aplicaciones que sólo usaban un solo cuadro de diálogo (una sola ventana); a pesar que AppWizard
nos genera un AboutBox.

Desde ya que una aplicación no se basa siempre en un solo diálogo sino que a veces necesitaremos incorporar más ventanas
a nuestros programas. Crearemos entonces un proyecto al cual llamaremos Dialogos y como siempre será Dialog Based.

Una vez generada la aplicación por AppWizard verá el diálogo cotidiano con los botones Aceptar y Cancelar.

Antes de incorporar un nuevo diálogo modificaremos nuestra pantalla principal.

Coloque el botón Cancelar en el extremo inferior izquierdo del cuadro de diálogo. Acceda a las propiedades de este botón,
cambie su ID por IDC_LLAMA y CAPTION por "Llamar al otro diálogo".

Ahora  agregaremos  un  nuevo  diálogo,  para  esto  en  la  ventana  WorkSpace  debe  estar  activa  la  solapa  ResourceView
(seguramente está activa ésta pues estuvo modificando el botón). Haga click con el botón derecho del mouse sobre la carpeta
Dialog y seleccione Insert Dialog del menú contextual.

Aparecerá  un  nuevo  diálogo  con  los  botones  Aceptar,  Cancelar  y  por  defecto  ID  =  IDD_DIALOG1.  Si  lo  desea  puede
modificar las propiedades del diálogo, pero en este caso dejaremos todo como está.

Cuando un agrega un diálogo sólo se incorpora el recurso (archivo de recurso), que sería el aspecto visual, pero para nada
está aún vinculado con la aplicación, pues necesita de una clase la cual traerá consigo las funciones miembro y los datos
miembro. Por eso cada vez que inserte un cuadro de diálogo cree la clase del mismo, ¿cómo se hace esto?; simplemente
presione Ctrl + W y aparecerá automáticamente antes de entrar a ClassWizard la siguiente ventana:

Se detectó que IDD_DIALOG1 es un nuevo recurso y que probablemente necesitaremos una clase para el mismo, entonces
no ofrece crear una nueva o seleccionar una existente; elegiremos Create a new class y pulsamos OK.

Aparecerá una ventana pidiendo que ingresemos un nombre para la clase, allí ingresaremos CDialogo1, (por convención
todas las clases comienzan con la letra C).

Automáticamente en el campo File Name aparecerá Dialogo1.cpp, (aquí se encontrará la definición de la clase) y en la lista
Base Class verifique que se encuentre seleccionada Cdialog. Presione OK, pasará a ClassWizard, presione nuevamente OK
para cerrar el asistente.

Ya tenemos entonces un nuevo cuadro de diálogo y una clase para el mismo, obviamente esto no hace que nuestra nueva
ventana sea útil en nuestro programa, ahora deberemos escribir el código necesario para poder mostrarla.

Regresemos a la ventana principal, pues el código que llamará al nuevo diálogo estará al presionar el botón IDC_LLAMA.
Pero el diálogo donde está este botón reconocerá la clase del nuevo diálogo si agregamos en el archivo de implementación
del diálogo principal el archivo de cabecera del nuevo diálogo que fue generado por ClassWizard, el cual tiene el mismo
nombre que el de implementación pero con extensión .h (en nuestro ejemplo sería dialogo1.h ). No se olvide, entonces, de
agregar la línea #include "Dialogo1.h" en DialogosDlg.cpp.

Cuando uno muestra un cuadro de diálogo de forma MODAL, hasta tanto no se cierre el diálogo llamado con su respectivo
botón cerrar o desde el menú de sistema NO SE PODRÁ ACCEDER AL RESTO DE LA APLICACIÓN y si se lo muestra
NO MODAL en cambio PODRA ACCEDER A OTROS PUNTOS DE LA APLICACIÓN.

Por ejemplo: en VC++ la barra de herramientas, donde están los controles, es un diálogo NO MODAL, pues uno puede
acceder a diferentes secciones de VC sin necesidad de cerrar la barra. Por otro lado ClassWizard es un diálogo, ventana,
MODAL porque mientras no pulsemos OK, CANCEL o el botón de cerrar de la ventana no podremos utilizar el resto de
VC++.

En principio veremos como llamar al cuadro de diálogo IDD_DIALOG1 como MODAL.

 

DIALOGOS MODALES:

Haga doble click en el botón IDC_LLAMA, (generará automáticamente el evento OnLlama) y escriba:

void CDialogosDlg::OnLlama()

{

// TODO: Add your control notification handler code here

int r; (1)

CDialogo1 dlgDialogo1(this); (2)

r=dlgDialogo1.DoModal (); (3)

}

Este  código  simplemente  se  ajusta  a  llamar  al  diálogo  de  forma  modal.  En  (2) se  crea  un  objeto  derivado  de  la  clase
CDialogo1  especificando  Clase  variable(this),  this  es  un  puntero  que  hace  referencia  al  objeto  actual,  o  sea  el  diálogo
principal. Y en (3) a través de DoModal(), del objeto recién creado, se llama al diálogo, y es más, se le pasa en este punto el
control  del  programa,  de  manera  tal  que  cuando  se  cierre  el  nuevo  cuadro  de  diálogo  el  flujo  del  programa  continuará
después de esta línea. Por eso DoModal() retorna un valor entero que puede ser IDOK si el nuevo diálogo al momento de
cerrarlo con EndDialog(), (ver más adelante), se le pasó el parámetro IDOK.

Por esto extienda el código de IDC_LLAMA como sigue:

void CDialogosDlg::OnLlama()

{

// TODO: Add your control notification handler code here

int r;

CDialogo1 dlgDialogo1(this);

r=dlgDialogo1.DoModal ();

//al volver verificará como se cerró

if (r == IDOK)

    AfxMessageBox("Usted cerró con Aceptar o Si");

else

    AfxMessageBox("Usted cerró con Cancelar o NO");

}

 

 En el nuevo diálogo agregue un botón con las siguientes propiedades:

ID = IDC_CERRAR

CAPTION = CERRAR.

Y escriba en OnCerrar:

void CDialogo1::OnCerrar()

{

// TODO: Add your control notification handler code here

CString Mensa;

Mensa="Seleccione para cerrar SI o No";

if (MessageBox(Mensa,MB_YESNO+ MB_ICONINFORMATION)==IDYES) (1)

    EndDialog(IDOK);

else

    EndDialog(IDCANCEL);

}

Cuando  se  presione  el  botón  Cerrar,  para  cerrar  el  diálogo,  se  le  informa  al  usuario  que  seleccione  como  quiere  salir,
presionando OK o CANCEL, de acuerdo a lo que se pulse.

 

 

Resumiendo:

Para insertar un diálogo, hacer click con el botón derecho del mouse sobre la carpeta Dialog del ResourceView y
seleccionar Insert Dialog.
Luego de agregar un diálogo hay que crear la clase del mismo, esto se hace accediendo a ClassWizard inmediatamente
después de haber insertado el diálogo.
No olvidar agregar la línea de inclusión de archivo de cabecera para el nuevo diálogo en el archivo de implementación
del diálogo que lo llama.
Un diálogo Modal se llama por medio de la función DoModal() perteneciente al objeto derivado de la clase del nuevo
diálogo, previamente definido en el mismo evento.
DoModal() retorna un valor entero que sirve para verificar como fue cerrado el diálogo con la función EndDialog().

Descargar archivos fuentes del ejemplo: dialogos.zip

DIALOGOS NO MODALES:

Ahora veamos como llamar a diálogos NO MODALES.

Cree un nuevo proyecto basado en diálogos y llámelo Nomodal.

En ResourceView haga click con el botón derecho del mouse sobre la carpeta Dialog y seleccione Inser Dialog.
Llame a ClassWizard, (por ejemplo haciendo Ctrl + W), aparecerá una ventana detectando que se agregó un nuevo
diálogo, deje marcado Create a new class y pulse OK.
En la ventana New Class en el cuadro de edición Name escriba CDialogoNoModal y acepte.
Escriba la línea #include "DialogoNoModal.h" en el archivo de implementación NoModalDlg.cpp.
En el diálogo principal agregue 2 botones y establezca las siguientes propiedades:

ID = IDC_LLAMAR y CAPTION = Llamar a diálogo no modal.

ID = IDC_CERRAR y CAPTION = Cerrar diálogo no modal.

En el evento OnLlamar escriba:

 

CDialogoNoModal* dlgNoModal =NULL; (1)

void CNomodalDlg::OnLlamar()

{

// TODO: Add your control notification handler code here

if (dlgNoModal == NULL) (2)

    dlgNoModal = new CDialogoNoModal(this); (3)

}

En la línea (1) antes de comenzar la función se declara un puntero a la clase del nuevo diálogo (global) y por defecto se le
asigna el valor NULL. Este puntero servirá para crear una instancia de la clase que será la forma por la cual manipularemos
luego el diálogo.

Precisamente en (2) si el puntero es NULL se crea la instancia por medio del operador new (3) el cual reserva memoria para
el objeto descendiente de this o sea el diálogo que lo llama.

Con esto la aplicación no va a funcionar, hace falta llamar a la función Create() y ShowWindow() desde el constructor del
nuevo formulario. Lo escrito en el constructor será los primero en ejecutarse al ocurrir la línea (3).

Al constructor del nuevo diálogo se accede por medio de la solapa ClassView de la ventana WorkSpace. Expanda la clase
del nuevo diálogo y haga doble click donde dice: CDialogoNoModal(CWnd* pParent =NULL); y escriba:

 

CDialogoNoModal::CDialogoNoModal(CWnd* pParent /*=NULL*/)

: CDialog(CDialogoNoModal::IDD, pParent)

{

//{{AFX_DATA_INIT(CDialogoNoModal)

// NOTE: the ClassWizard will add member initialization here

//}}AFX_DATA_INIT

 

//Crear la ventana del cuadro de diálogo no modal

if (Create(CDialogoNoModal::IDD, pParent)) (1)

    ShowWindow(SW_SHOW); (2)         //Si se pudo crear, se muestra

}

Cuando, en el diálogo principal, se pulsa el botón que llama al nuevo diálogo (usando new ), se ejecuta el código del
constructor del objeto dlgNoModal, donde habitualmente se inicializan, por ejemplo variables miembros, pero en este caso
se intenta crear el diálogo (1) y de ser posible lo muestra (2).

Si ejecuta la aplicación y pulsa el botón que dice: "Llamar a diálogo no modal" accederá al nuevo diálogo no modal que
permite acceder indistintamente a sus controles como a los del diálogo principal.

Faltaría escribir el código en el botón que permite cerra
  • Links de descarga
http://lwp-l.com/pdf8651

Comentarios de: Apunte de VC++ 6 - Capítulo V (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad