Iván Bernal, Ph.D.
[email protected]http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal
Escuela Politécnica Nacional
Escuela Politécnica Nacional
Quito – Ecuador
Copyright @2003, I. Bernal
Clase 10: Barras de estado
Lunes, 20 de Enero de 2003
• Aspectos adicionales de barras
de herramientas.
• Barras de estado.
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 33
Barras de Herramientas (1)
• Las barras de
herramientas son objetos
de la clase CToolBar, y
las barras de estado son
objetos de la clase
CStatusBar.
– Ambas clases se derivan de CControlBar, la que es derivada de CWnd.
• Las barras de
herramientas se
construyen en base al
“control común toolbar”.
• Tienen la característica de
“adosamiento” (docking) o
flotantes.
Barras de Herramientas (2)
• En Visual C++ 6.0, se introdujo un nuevo tipo de barra de
herramientas llamada una “rebar”.
– Las rebar están basadas en los controles que vienen con Microsoft Internet Explorer.
• Las imágenes de los botones de una barra de herramientas
se almacenan en
un solo
un solo
bitmap.
bitmap
– Cada imagen de un botón tiene un tamaño de 15 pixels x 16 pixels. – El bitmap se almacena en un archivo Toolbar.bmp, en el
subdirectorio de la aplicación \res.
• Cuando se presiona un botón se envía un mensaje de
comando, de igual forma que lo hacen los menús, y
aceleradores del teclado.
– La mayoría de las veces, un botón en una barra de herramientas tiene un par en un ítem de un menú.
• También se tiene asociados mensajes de comando para
actualizar el interfaz de usuario, para modificar la apariencia
de los botones.
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 55
• Abriendo como un archivo de texto el archivo con extensión
“.rc”, se puede observar la descripción de la estructura de
una barra de herramientas.
– Este archivo contiene la descripción de lo que se puede manipular con el editor de recursos.
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 77
Actividades Relacionadas
• Revisar el ejemplo del libro de Kruglinski.
• Revisar los comentarios asociados expuestos
en el libro.
Barras de Estado (1)
• No responde a acciones del usuario ni
genera mensajes de comando.
– Solo presenta texto considerado complementario a la
aplicación.
– Existen paneles que pueden presentar:
• Líneas de mensaje.
• Indicadores de estado.
– Para usar la barra de estado para algo particular, el
comportamiento por predefinición se debe cambiar:
• Mensajes asociados a menús y barras de
herramienta.
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 99
• Existe un arreglo de indicadores generado y
almacenado en MainFrm.cpp.
• Las barras de herramienta y de estado se
crean bajo el control de la ventana principal.
• Para cambiar los indicadores se usa la
función SetIndicators.
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 1111
Barras de Estado (4)
• Línea de mensaje:
– Presenta un mensaje que puede cambiar dinámicamente.
– Se debe tener acceso a la barra de estado antes de cambiar
su contenido, y luego definir el texto a presentarse.
• Se requiere un índice, que inicia en 0, desde el extremo
izquierdo.
– El código que se presenta correspondería a lo que se haría
desde una clase vista.
Barras de Estado (5)
• Indicadores de Estado:
– Un panel de estado está relacionado a un mensaje definido
entre los recursos de la aplicación.
– Los mensajes en los paneles pueden ser escondidos o
presentados, de acuerdo a la lógica del programa.
– El ID es utilizado para enrutar el comando para actualizar el
interfaz de usuario.
– El código anterior está relacionado al “Caps Lock” (letras
mayúscula o minúsculas).
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 1313
• La función de creación de
la barra de estado,
acepta por default el valor
como ID
AFX_IDW_STATUS_BAR
.
– En el código generado y presentado en una transparencia anterior, no se especificó este ID. – MFC utiliza este ID parasaber que presentar como línea de mensaje,
indicando los mensajes asociados a menús y botones.
– Para cambiar el comportamiento de la línea de mensaje se debe cambiar este ID.
Barras de Estado (7)
• Se debe definir la constante ID_MY_STATUS_BAR,
en el archivo “resource.h”, utilizando el editor de
símbolos de Visual C++.
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 1515
Barras de Estado (8)
• Finalmente, si se debe cambiar el ID de la barra de estados,
también se debe corregir la lógica asociada a esconder y
presentar la barra de estados.
– ID_VIEW_STATUS_BAR representa la barra de estados y para ella se debe generar las funciones asociadas a los mensajes de comandos, en la clase CMainFrame.
– Revisar el ejemplo B del capítulo de Kruglinski para mas detalles.
Barras de Estado (9)
• En este ejemplo se modificará la información
presentada por la barra de estados, de acuerdo a lo
que se indica en la figura.
• Para este ejemplo se debe cambiar el ID de la
ventana, como se explicó anteriormente y cambiar el
código asociado a la creación de la barra de estados.
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 1717
• Para asignar un mensaje a un símbolo se
debe usar el editor de recursos.
• Esto es necesario para definir los nuevos
elementos del arreglo que acepta la barra de
estados.
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 1919
Barras de Estado (12)
• Los handlers asociados a los nuevos indicadores de la barra
de estados en CMainFrame, deben ser agregados
manualmente.
– Se debe añadir el código necesario en “.h” y “.cpp”.
• Se debe cambiar el arreglo de indicadores.
Barras de Estado (13)
• Para el ejemplo, se debe presentar información
relacionada a si los botones del mouse están o no
presionados.
– Los botones del mouse derecho e izquierdo tienen asociados
códigos de teclas virtuales.
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 2121
• El código presenta las acciones a tomarse dentro de la vista
para cambiar la línea de mensaje de la barra de estado.
• En este caso cada vez que se mueva el mouse debe
actualizarse el contenido de la barra de estado.
Actividades Relacionadas
• Revisar el ejemplo del
libro de Kruglinski.
• Revisar los
comentarios
asociados expuestos
en el libro, para mas
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 2323
Proyecto (1)
• Agregar código para
cambiar la barra de
estados.
– Un mensaje deberá presentar cuantos números del total a generarse se tiene en un momento dado.
– Un indicador presentará la información si se trabaja en modo de número o no. – La información asociada
con los botones de la barra de herramientas sigue siendo la misma.
Proyecto (2)
• Tres nuevos botones se deben añadir para definir el color de
los rectángulos vacíos, los que tienen números y el texto.
– Se debe incluir también un ítem en los menús por cada caso.
• Frente a un click en los botones se debe presentar la ventana
de selección de color que permite al usuario escoger el color.
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 2525
• El último botón a añadirse es el “T”, que permite definir el
tamaño de la cuadrícula.
– Se debe incluir también un ítem en el menú.
• Al presionar este botón se debe presentar una ventana de
diálogo, como en la figura.
– La ventana permite definir el número de filas y columnas. – El botón “Cancel” cancela la operación.
– El botón “OK” actualiza el tamaño pero desecha tdos los números generados.
– Debe haber siempre consistencia con la información de la barra de estados.
Proyecto (4)
• Proyecto:
– Para el 27 de Enero de 2003, hasta las 9am.
– Detalladamente revisar la funcionalidad del programa
entregado.
– Pueden utilizar mi solución al Proyecto 2.
• Deber:
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 2727
Ventanas de Diálogo (1)
Ventanas de Diálogo (2)
• La clase CColorDialog representa la ventana para
escoger los colores.
– Esta clase tiene como miembro la estructura “m_cc”, del tipo
CHOOSECOLOR .
– En el código de ejemplo se usa el miembro “rgbResult ”, para
presentar el color actualmente seleccionado en la ventana.
• Esto funciona si la bandera (flag) CC_RGBINIT está
seleccionada, como es el caso del ejemplo.
• CC_FULLOPEN permite presentar la sección extra de la
ventana para definir colores del usuario.
– La función DoModal presenta finalmente la ventana.
• La palabra Modal significa que solo esa ventan está activa;
la vista o ventana principal no pueden interactuar con el
usaurio.
– Cuando el usuario concluye su tarea con la ventana
presionando “OK” se ejecuta la función GetColor( ) para
recuperar la selección hecha.
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 2929
• Agregar una nueva ventana de diálogo.
– Incluye dos botones que se usan si son necesarios y su
texto puede ser cambiado.
Ventanas de Diálogo (4)
• En la ventana se pueden
agregar elementos de la
barra de controles.
• Los que se requieren por
ahora son:
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 3131
Ventanas de Diálogo (5)
• En la ventana de
“Propiedades”:
– Se puede cambiar el ID
del control en la pestaña
“General”.
– Para el ejemplo conviene
que se ingresen
solamente números para
las filas y columnas.
• Esto se define en la
pestaña de “Styles”.
• La validación se hace
sin que el usuario
agregue una sola
línea de código.
Ventanas de Diálogo (6)
• Con doble click del mouse se puede asociar una
nueva clase con la ventana de diálogo.
• Se debe asignar un nombre para esta nueva
clase.
• La base de la nueva clase es CDialog y se indica
el ID asignado en el editor para nuestra nueva
ventana.
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 3333
• Luego de presionar “OK” se selecciona la pestaña
“Member variables de la ventana del ClassWizard.”
– Se añadirá una variable miembro de la nueva clase que represente
a los diferentes controles agregados en la ventana.
– Para el ejemplo es de importancia el control que permite al usuario
especificar un valor.
Iván Bernal, Iván Bernal, Ph.DPh.D.. http
http://://wwwfie.epn.edu.ecwwwfie.epn.edu.ec//ibernalibernal Dic. 02
Dic. 02 ––Abril 03Abril 03 PHV PHV
Escuela Politécnica Nacional Escuela Politécnica Nacional
Quito
Quito --EcuadorEcuador 3535
Ventanas de Diálogo (9)
• Debido a las características seleccionadas (el usuario solo
puede ingresar un número entero), el wizard nos ayuda a
definir el rango del entero.
– En este caso los valores deben fluctuar entre 1 y 10.