Apunte de Visual C++

 

Por: Demian C. Panello         demianpanello@yahoo.com.ar                  

 

Capítulo I

Indice rápido del capítulo 1:                                                              

 

INTRODUCCIÓN:

El entorno de desarrollo de VC++ 6.0 ofrece muchas posibilidades al programador, desde crear aplicaciones de diversos formatos y características, pasando además por la creación de librerías DLL, iconos, bitmaps, cursores, etc.

Todo el IDE, (entorno de desarrollo), en conjunto es una gran "cocina" para desarrollar las aplicaciones más versátiles tanto para entorno Windows como DOS.

Es importante aclarar que cuando se pretende crear una aplicación que corra bajo Windows con VC++ se debe tener en cuenta si la misma estará basada en MFC o si será una aplicación WIN 32 estándar.

Microsoft Foundation Class (MFC):

Visual C++ se suministra junto con la biblioteca MFC que es un conjunto de clases predefinidas de C++. Estas clases han pasado a ser un estándar de desarrollo para aplicaciones Windows y poseen clases que facilitan mucho la programación en C++, por ejemplo al incluir un tipo de dato CString para declarar cadenas; cosa que no existe en C y siempre es un dolor de cabeza.

También se pueden crear programas Windows que no usen MFC, así se obtendría una aplicación con la cual no haría falta distribuir la librería MFC.

 

"HOLA VISUAL C++":

Para introducirse en un nuevo lenguaje no hay como un buen ejemplo y éste históricamente fue y es el famoso "Hola Mundo".

Para comenzar a desarrollar esta pequeña aplicación ingresamos en VC++, luego seleccionamos NEW en el menú FILE y aparecerá la siguiente pantalla:

new.jpg (35516 bytes)

 

Esta pantalla muestra los distintos proyectos que uno puede desarrollar con VC++. Como queremos hacer una aplicación basada en MFC seleccionaremos MFC AppWizard (exe). En VC++ como en VB se trabaja con PROYECTOS, a su vez éstos en VC++ se agrupan en WORKSPACES ("espacios de trabajo"). Entonces en Project Name escribimos el nombre de nuestro proyecto, HolaVC, en Location por defecto se establecerá la ruta de nuestro nuevo WORKSPACE y será ARCHIVOS DE PROGRAMA\Microsoft Visual Studio\MyProjects\HolaVC. (esta opción se puede modificar).

Una vez ingresado el nombre del proyecto veremos que el botón OK ya está activo si lo pulsamos damos inicio al ASISTENTE DE APLICACIONES MFC el cual nos creará un armazón de programa que después habrá que adecuar (algo así como la ventana por defecto que trae VB cuando uno crea un proyecto).

Nos aparece la siguiente ventana:

step1.jpg (22040
 bytes)

Una aplicación de Windows puede ser SDI (Single Document Interface), MDI (Multiple Document Interface) o Dialog Based (basada en dialogos) . Single Document es muy similar a Dialog Based, salvo que por defecto VC le agrega menúes y MDI es una aplicación como por ejemplo Word, con una ventana principal que puede contener a muchas otras en su interior (como un contenedor).

Ahora seleccionaremos Dialog Based y como lenguaje de recursos (recursos es algo que más adelante se explica en detalle) dejaremos por defecto Spanish, salvo que pretendamos que nuestra aplicación se use en Alemania entonces seleccionaríamos German..., : ) éste no será nuestro caso. Luego de todo esto presionamos NEXT para pasar a la siguiente pantalla:

step2.jpg (26363
 bytes)

Esta pantalla nos pregunta que características le queremos agregar a nuestra aplicación, About Box, Context Sensitive Help (un botón que llame a un archivo de ayuda), 3D Controls, dejemos todo como está, y pasemos a la siguiente ventana pulsando nuevamente NEXT.

step3.jpg (27764
 bytes)

Aquí se nos está diciendo que se creará un proyecto MFC Standard y además se nos pregunta si deseamos o no que el código fuente generado automáticamente por éste asistente esté comentado; obviamente dejamos YES, PLEASE porque esos comentarios son muy útiles para no perderse.

También debemos especificar como queremos usar la librería MFC con el ejecutable: como DLL compartida (dinámica) o como librería estática. Dejemos la primer opción pues es común en Windows que las aplicaciones funcionen de esta forma, no obstante si seleccionamos como librería estática, obtendremos un ejecutable más grande.

Si pulsamos NEXT accedemos a la última pantalla de este asistente que nos ofrece la posibilidad de cambiar los nombres de las clases que está a punto de crear, esto habitualmente no se modifica.

Pulsamos FINISH y se muestra una listado con las características del armazón de aplicación que el asistente está por hacer, OK y listo.

El asistente nos generó la base de una aplicación que consta de una ventana con dos botones (aceptar y cancelar) con un texto en el centro y además otra ventana (más pequeña), el Acerca de....

Este "armazón" es totalmente funcional, podemos ejecutar el programa haciendo click en el icono con el signo de exclamación ! o precionando Ctrl + F5, nos dirá que el subdirectorio DEBUG de nuestra aplicación no existe y si deseamos crearlo, decimos que YES y tenemos el programa en ejecución. Nos informó de la falta de la carpeta DEBUG por ser la primera vez en ejecutar el programa y esta carpeta se crea ya que por defecto todas la aplicaciones en desarrollo en VC++ contienen información de depuración, que nos permite depurar el programa poniendo puntos de interrupción, ejecutando paso a paso, etc., pero cuando terminemos nuestra aplicación y se la entreguemos al usuario ésta no debe contener información de depuración pues hará que descienda su performance y el ejecutable sea más grande. Para quitar la información de DEBUG (sólo cuando tengamos la aplicación terminada), vamos a la opción SET ACTIVE CONFIGURATION.. del menú BUILD y seleccionamos RELEASE.

En el entorno de desarrollo se nos presenta a la izquierda, una ventana que tiene 3 solapas:

Class View, Resource View y File View.

Seleccionando la solapa Class View, podremos ver que dice HolaVC classes, si expandimos esta descripción haciendo click en él +, se desplegarán las clases, (generadas por el asistente) que forman mi aplicación: CAboutDlg, la clase de la ventana AboutBox, CHolaVCApp, la clase aplicación que existe en todas las aplicaciones y CHolaVCDlg, la clase de la ventana principal (la que contiene los botones Aceptar y Cancelar, y donde luego agregaremos un botón más).

Además hay una carpeta llamada Globals donde se agrupan las variables globales.

Las clases a su vez contienen más cosas: Funciones miembro y variables miembros. Precisamente gran parte del código que uno escribe en VC++ se trata de nuevas funciones miembros que uno agrega a las clases existentes.

En todo lenguaje de programación visual, sea VB o VC++, se tiene un lugar del IDE donde uno puede diseñar el aspecto visual de la aplicación y otro donde uno puede escribir el código necesario para los objeto diseñados de manera tal que las cosas respondan de acuerdo a lo que uno quería. En VC++ se accede al lugar donde se lleva a cabo el diseño seleccionando la solapa RESOURCE (recursos) de la ventana WORKSPACE, (la de la izquierda donde además están todas las clases).

Al seleccionar RESOURCE se podrá observar varias carpetas Dialog, Icon, String Table y Version. Expandiendo la carpeta Dialog veremos IDD_ABOUTBOX y IDD_HOLAVC_DIALOG estas son las dos ventanas "diálogos" creados automáticamente por el Asistente de Aplicaciones. Nosotros modificaremos IDD_HOLAVC_DIALOG, entonces hacemos doble click en el mismo y se nos mostrará la ventana con los dos botones por defecto "Aceptar" y "Cancelar" lista para modificar.

La pantalla debería presentar más o menos lo siguiente:

HolaVCini.jpg (60926
 bytes)

Primero marcamos con el mouse el texto "A HACER:..." y lo eliminamos presionando la tecla suprimir. Luego de la barra de herramientas seleccionamos un botón y lo colocamos en algún lugar del cuadro de diálogo. (por lo pronto no toque los botones Aceptar y Cancelar que están por defecto).

Luego que tenemos un nuevo botón, ahora hay que modificar algunas de sus propiedades, por ejemplo la propiedad Caption que por defecto es button1.

Para acceder a las propiedades de los controles hacemos click con el derecho sobre el control, en este caso el botón, y seleccionamos del menú contextual, "propiedades".

propiedades.jpg (9644
 bytes)

En la solapa General de la pantalla propiedades podremos modificar, entre otras cosas, la propiedad Caption (que es el texto que muestra el botón), y la propiedad ID, la cual es muy importante ya que con ese valor se reconocerá al botón al escribir código.

Primero modifique la propiedad Caption y escriba "Pulseme"; tambien modificaremos el ID, pues el que tiene por defecto no es muy representativo de lo que el botón realizara. Escriba IDC_PULSEME (por convención se recomienda dejar el prefijo IDC_ y luego escribir algo que represente la utilidad del control.

No altere el resto de las propiedades, pues por ahora no las necesitamos, aún así si lo desea puede seleccionar las restantes solapas y observar que otras propiedades puede modificar.

Nuestra idea es que, al pulsar el botón "Pulsame", se muestre el mensaje: "HolaVC", por ejemplo a través de un cuadro de mensaje. Para esto hay que tener en cuenta que se necesita una función que maneje la acción de "pulsar el botón", en Windows esta función así como muchas otras (mover el mouse, tocar una tecla del teclado, hacer doble click, etc), se denominan "Mensajes", pues estas acciones son precisamente mensajes entre las ventanas, que uno tiene que interceptar de alguna forma.

Existen muchas formas de crear un manejador de mensajes, pero habitualmente se hace click con el derecho del mouse sobre el control al cual se quiere crear un manejador y se selecciona la opción "ClassWizard". También se puede acceder a ClassWizard en cualquier momento presionando Ctrl + W. ClassWizard es un asistente para la creación de Mapas de Mensajes (manejadores de mensajes), funciones miembros, variables miembros, clases, etc.

classwizard.jpg (36107
 bytes)

En la lista Object Ids del ClassWizard selecciones IDC_PULSAME, pues queremos crear un mapa de mensajes para este control, y en la lista Messages selecciones BN_CLICKED. Luego pulse Add Function y aparecerá un mensaje alertando que está por crear la función miembro OnPulsame; si lo desea puede modificar este nombre, pero no es recomendable, entonces sólo presione OK. La nueva función se habrá sumado a la lista de Member Functions, pulse Edit Code para poder escribir el código de esta nueva función. Aparecerá lo siguiente:

void CHolaVCDlg::OnPulseme()

{

// TODO: Add your control notification handler code here

 

}

 

Entre las llaves tendremos que escribir nuestro código que permita mostrar el mensaje "HolaVC".

La línea en color verde es un comentario que nos indica que en esa sección tiene que escribir uno el código que actuará al pulsar el botón.

Esta función, OnPulseme, forma parte de la clase base, CHolaVCDlg. Podemos cerciorarnos de su existencia si en la ventana Workspace seleccionamos la solapa ClassView; allí veremos todas las funciones y variables miembros de esta y otras clases.

Bien, escribamos entonces el código para mostrar nuestro mensaje:

Sólo esa línea de código es necesario escribir.

Presione Ctrl + F5 y se ejecutará la aplicación; si pulsa el botón aparecerá el mensaje:

MessageBox.jpg (3167 bytes)

Los parámetros de la función MessageBox son: Texto a mostrar, Título del mensaje e icono + botones a mostrar (en este caso como no se especifican los botones muestra por defecto OK).

 

Botones posibles

Iconos posibles

  • MB_ABORTRETRYIGNORE

  • MB_OK

  • MB_OKCANCEL

  • MB_RETRYCANCEL

  • MB_YESNO
  • MB_YESNOCANCEL
  • MB_ICONEXCLAMATION

  • MB_ICONINFORMATION
  • MB_ICONQUESTION

  • MB_ICONSTOP

 

Capítulo siguiente (2).

Página principal