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

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

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

Actualizado el 21 de Marzo del 2018 (Publicado el 29 de Enero del 2018)
529 visualizaciones desde el 29 de Enero del 2018
208,5 KB
5 paginas
Creado hace 7a (21/11/2016)
Apunte de Visual C++

 

Por: Demian Panello        [email protected]                 

 
Capítulo II
Indice rápido del capítulo 2:

Cuadros de edición. (Edit Control).
Funciones GetDlgItem(), GetWindowText() y SetWindowText().
Agregar variables miembros.
Función UpdateData().

 

CUADROS DE EDICIÓN:

Otro control importante en Windows (además del botón), son los cuadros de edición. En estos controles se basa
prácticamente el 70% del ingreso de datos en una aplicación Windows. Por lo tanto es después del botón, el control más
común.

Ahora realizaremos un programa que utilizará un cuadro de edición, y el objetivó será que, mientras escribimos algo en el
cuadro de edición, simultáneamente se escribirá lo mismo en el título del diálogo (ventana).

Entonces, vaya al menú FILE –NEW y seleccione, como en el ejemplo anterior, MFC AppWizard (exe) y ponga Edicion
como Project Name. Continúe con el Asistente de aplicaciones como en el primer ejemplo hasta crear la estructura básica
del programa.

Luego que tenga en pantalla el diálogo con los dos botones por defecto Aceptar y Cancelar, agregue, desde la barra de
controles, un cuadro de edición (icono ab| ), y acceda a sus propiedades haciendo click con el derecho del mouse sobre el
control. Verifique que la propiedad ID sea IDC_EDIT1 (por defecto tiene que ser esa), no va hacer falta que la modifique.

Cierre el cuadro de propiedades.

Bien, como queremos que al momento de estar escribiendo cada carácter del texto que ingresamos en el cuadro de edición,
se muestre además en la barra de título de la ventana, debemos escribir código para el mensaje EN_CHANGE del cuadro de
edición.

Para crear este gestor de mensaje, debemos acceder al ClassWizard, esto se logra haciendo click con el derecho del mouse
sobre el control de edición y seleccionando la opción ClassWizard del menú contextual.

En  ClassWizard  verifique  que  en  la  lista  Object  ID  se  encuentre  seleccionado  IDC_EDIT1  y  en  la  lista  Messages,
EN_CHANGE. Presione Add Function, EN_CHANGE pasará a formar parte de la lista Member Functions, selecciónela y
presione Edit Code.

Escriba entonces el siguiente código:

void CEdicionDlg::OnChangeEdit1()

{

// TODO: If this is a RICHEDIT control, the control will not

// send this notification unless you override the CDialog::OnInitDialog()

// function and call CRichEditCtrl().SetEventMask()

// with the ENM_CHANGE flag ORed into the mask.

// TODO: Add your control notification handler code here

CEdit* edTexto; (1)

CString strDato; (2)

edTexto = (CEdit*) GetDlgItem(IDC_EDIT1); (3)

edTexto­>GetWindowText (strDato); (4)

SetWindowText(strDato); (5)

}

Los comentarios que están al principio (en verde), los colocó ClassWizard automaticamente y hacen referencia en el caso
que se tratara de un control de texto enriquecido, que no envía directamente este mensaje. Esto por lo pronto no nos interesa.

Antes  de  continuar  analizando  las  líneas  de  código  enumeradas,  conviene  destacar  lo  siguiente:  "TODOS  LOS
CONTROLES  (OBJETOS)  DE  WINDOWS  SON  UNA  VENTANA",  esto  quiere  decir  que  todos  los  controles  son
derivados de la clase CWnd.

El control de edición es un objeto CWnd, y en muchas ocasiones dejaremos esto así, pero a veces es conveniente convertir el
tipo de los controles a su clase correspondiente, en nuestro caso CEdit.

Por esto en la linea (1) se declara la variables edTexto como un puntero a la clase CEdit, pues la intención es asociar el
cuadro de edición con esta variable, para así poder hacer uso de las funciones miembro de la clase CEdit.

En la línea (2) se declara un variable de tipo CString (cadena), donde se almacenaran los caracteres que se van ingresando.

Luego de las declaraciones de variables, debemos asociar el puntero con el cuadro de edición. Esto hace la línea (3) a través
de la función GetDlgItem a la cual se le pasa el ID del objeto a asociar con la variable; el problema es que GetDlgItem
retorna  un  puntero  a  CWnd  y  yo  quiere  uno  a  CEdit,  por  eso  se  utiliza  el  operador:  (Cedit*),  que  permite  realizar  la
conversión al tipo deseado.

Una vez que uno tiene la variable asociada con el control se pueden usar las funciones miembro de esa clase. En la línea (4)
se obtiene el texto del cuadro de edición con GetWindowText a la cual se le pasa como parámetro la variable CString. Note
que se llama la función por medio del operador: ­> pues la variable es un puntero a CEdit y no una variable CEdit.

En la última línea, (5), se establece el título del cuadro de diálogo por medio de la función SetWindowText a la cual se le
pasa la variable CString que desde la línea anterior viene cargada con el contenido del cuadro de edición.

Se escribe SetWindowText directamente porque por defecto actuará sobre la clase principal que es la que da origen al cuadro
de  diálogo,  también  se  podría  haber  usado  el  puntero  this que  es  el  que  apunta  al  objeto  por  defecto,  (quedaría:  this ­>
SetWindowText(strDato). )

 

AGREGAR VARIABLES MIEMBROS:

Para el caso de los controles que permiten ingreso de datos es muy importante el uso de esa información que probablemente
se pasarán a diferentes gestores de mensajes que los procesará. Por ejemplo se ingresa una edad y en algún momento hay
que validarla.

Los datos contenidos en un control se transfieren a variables que luego el código manipula, después se pueden volver a
volcar al control.

Para ejemplificar esto modificaremos la aplicación anterior agregando un botón en el cuadro de diálogo. Escribiremos el
código adecuado para cuando se pulse el botón se invierta el contenido del cuadro de dialogo.

En  vez  de  agregar  un  nuevo  botón,  utilicemos  el  botón  CANCELAR.  Selecciónelo,  vaya  a  Propiedades,  modifique  la
propiedad Caption a Invertir y cambie el ID por IDC_INVERTIR.

El Cuadro de diálogo debería quedar más o menos así:

Primero crearemos una variable miembro para el cuadro de edición; para esto accedemos a ClassWizard y seleccionamos la
solapa Members Variables.

Una vez ahí se marca de la lista Control’s ID, el ID del cuadro de edición, (IDC_EDIT1), y se pulsa el botón Add Variable.
En la ventana que aparece ingrese m_strDato como Member Variable Name, Category Value y Variable Type Cstring
(puesto que el valor ingresado será una cadena). Acepte esta ventana. Y acepte la ventana del ClassWizard.

Bien, ya tenemos una variable para almacenar el contenido del cuadro de edición. ClassWizard relaciona automáticamente
las variables miembro con sus clases, así que sólo debemos escribir el código que invierta lo ingresado y lo deje nuevamente
en el mismo cuadro de edición.

Seleccione el botón Invertir y acceda a ClassWizard.

Seleccione la solapa Messages Map, IDC_INVERTIR en Object’s ID y BN_CLICKED en Messages.

Presione Add Function.

Acepte el nombre sugerido y la función se agregará a la lista Member Functions.

Presione Edit Code.

Estamos entonces en la función OnInvertir de la clase CedicionDlg donde escribiremos el código que invertirá lo ingresado.
Escriba:

void CEdicionDlg::OnInvertir()

{

// TODO: Add your control notification handler code here

UpdateData(TRUE); (1)

if (m_strDato.IsEmpty ()== FALSE) (2)

    {

    MessageBox("Ahora se invertirá: " + m_strDato); (3)

    m_strDato.MakeReverse (); (4)

    UpdateData(FALSE); (5)

    }

}

Lo primero que hay que hacer es que el contenido del cuadro de edición pase a la variable miembro. Esto hace la línea (1)
con la función UpdateData(TRUE) luego de esta linea la variable m_strDato contiene lo ingresado en el control.

En la línea (2) se verifica que no esté vacía (lo que inplica que el cuadro de edición se dejó en blanco). En caso de haber
ingresado algo, entonces hay que darlo vuelta, se muestra un mensaje advirtiendo esto: línea (3).

En (4) se hace uso de la función MakeReverse() de la clase Cstring, que invierte la cadena sobre sí misma.

En línea (5) se transfiere el contenido de la variable a el control.

Resumiendo:

Se declaran variables miembro para los controles cuando se necesita pasar el contenido de los mismos a funciones que
los procesen.
Los contenidos de los controles se transfieren a las variables por medio de la función UpdateData(TRUE).
Y luego para transferir los valores de las variables a los controles se usa UpdateData(FALSE):

Descargar archivos fuentes del ejemplo: edicion.zip

Capítulo siguiente (3)

Capítulo anterior (1)
  • Links de descarga
http://lwp-l.com/pdf8523

Comentarios de: Apunte de VC++ 6 - Capítulo 2 (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