Вы находитесь на странице: 1из 6

UNIVERSIDAD DEL ISTMO

Ingeniería en computación
Compiladores

PROFESOR M. en C. J. Jesús Arellano Pimentel


ALUMNO Emanuel Marcial Castillo

NÚMERO DE PRÁCTICA 2

NOMBRE DE LA PRÁCTICA Recurso Menú y procesamiento de mensajes

Conocer el uso básico de recursos para adicionar nuevos elementos al


OBJETIVO GENERAL
menú.

- Editar el archivo de recursos.


OBJETIVOS ESPECÍFICOS - Aprender a procesar mensajes (eventos) en Aplicaciones de
Escritorio de Windows para elementos del menú.
EQUIPO REQUERIDO Computadora personal con 2 GB de RAM mínimo (4 recomendado).
- Windows 7/8/10
SOFTWARE REQUERIDO - Microsoft Visual Studio Community 2017 para escritorio de
Windows.

1.- Fundamentos.

1.1.- Recurso menú

Desde el punto de vista de la programación en Windows un recurso es un componente


de las aplicaciones como: los menús, los iconos, los cuadros de diálogo, las cadenas de
caracteres, los mapas de bits, los cursores, etc. Windows almacena separados el código y los
recursos, y estos últimos pueden ser editados por separado, permitiendo por ejemplo, hacer
versiones de los programas en distintos idiomas sin tener acceso a los ficheros fuente de la
aplicación [Salvador13].

Cada recurso tiene una constante simbólica asociada la cual esta definida en el archivo
de cabecera Resource.h. Si se desea agregar un nuevo recurso, entonces habrá que adicionar
una nueva constante simbólica en este archivo para el nuevo recurso. Se sigue una convención
para nombrar estas constantes, se debe comenzar con las letras ID seguido de una letra que
identifique el tipo de recurso, por ejemplo M indicaría un recurso de tipo menú, después sigue
un guión bajo y por último una palabra relacionada con el propósito del recurso.

El procesamiento de WM_COMMAND se utiliza para procesar los mensajes


provenientes de los menús y otros recursos (pej. botones). Procesar un nuevo evento requiere
de la adición de una sentencia case para la constante simbólica asociada al recurso dentro del
switch (wmId) que forma parte del procesamiento del mensaje WM_COMMAND. La presente
práctica muestra como hacer esto.

Ingeniería en Computación M. C. J. Jesús Arellano Pimentel / Emanuel Marcial Castillo


1
2.- Desarrollo

2.1 Crear una Aplicación de Escritorio de Windows

Paso 1 Iniciar el MVS Community 2017.

Paso 2 Crear una nueva Aplicación de Escritorio de Windows.


Seleccionar la opción del menú Archivo->Nuevo Proyecto. Del cuadro de dialogo
Nuevo proyecto en Instalado, seleccionar Visual C++, y a su vez Escritorio de
Windows y dentro de éste, seleccionar Aplicación de consola de Windows (ver Figura
1). El nombre del proyecto o solución podría ser MenuAplicacion. Presionar el botón
Aceptar.

Figura 1. Cuadro de diálogo Nuevo Proyecto para la aplicación MenuAplicacion.

Paso 3 Adicionar un nuevo elemento al menú.


Para adicionar un nuevo elemento al menú es necesario editar el archivo de recursos
con extensión .rc. En el explorador de soluciones del Visual Studio podemos localizar
el archivo MenuAplicacion.rc correspondiente a los recursos (ver Figura 2), para
editarlo será necesario dar un clic derecho sobre el archivo y del menú flotante elegir la
opción <>Ver código.

Ingeniería en Computación M. C. J. Jesús Arellano Pimentel / Emanuel Marcial Castillo


2
Figura 2. Apertura del archivo de recursos de la aplicación MenuAplicacion.

Una vez abierto el archivo se adicionará, después de la línea 41, la siguiente línea de
código:

MENUITEM "&Hola Mundo", IDM_HOLA

de tal forma que la sección del menú quede de la siguiente forma:

/////////////////////////////////////////////////////////////////////////////
//
// Menú
//

IDC_MENUAPLICACION MENU
BEGIN
POPUP "&Archivo"
BEGIN
MENUITEM "&Hola Mundo", IDM_HOLA
MENUITEM "&Salir", IDM_EXIT
END
POPUP "Ay&uda"
BEGIN
MENUITEM "&Acerca de...", IDM_ABOUT
END
END

Como se puede observar la estructura del menú es bastante intuitiva. Todos los
elementos del menú principal inician con un POPUP y sus ítems se encuentran entre una
sentencia BEGIN y una sentencia END. Además cada elemento del menú inicia con una
sentencia MENUITEM, seguido del texto de la opción del menú y termina con una
constante simbólica, en este caso la constante asociada al nuevo elemento es IDM_HOLA,
la definición de dicha constante debe adicionarse al archivo de encabezado Resource.h,

Ingeniería en Computación M. C. J. Jesús Arellano Pimentel / Emanuel Marcial Castillo


3
la Figura 3 muestra un segmento de este archivo con la nueva línea de código resaltada
en azul. Es importante mencionar que el valor 200 asociado a la constante no debe
repetirse para otras constantes asociadas a nuevos recursos, si se adiciona un nuevo
elemento lo recomendable es que se siga un consecutivo, así la próxima constante
simbólica debería tener asociado el valor 201, la siguiente el 202 y así sucesivamente.

Figura 3. Adición de la constante simbólica IDM_HOLA en el archivo Resoruce.h.

Finalmente se deberán guardar ambos archivos. Cada que se requiera adicionar un


nuevo elemento (ítem) a las opciones del menú principal se deberá hacer el
procedimiento aquí descrito, pero si se requiere una nueva opción dentro del menú
principal se deberá seguir con la estructura del menú generado automáticamente1.

Paso 5 Procesar el mensaje de la nueva opción del menú.


El procesamiento del mensaje para la nueva opción del menú se hará a través de su
constante simbólica asociada. Para esto será necesario editar el archivo
MenuAplicacion.cpp, en particular la función WndProc que inicia aproximadamente en
la línea de código #124. Habrá que adicionar un nuevo caso a la estructura switch
(wmId) que es la encargada de procesar los mensajes generados por las opciones del
menú, dicha estructura inicia aproximadamente en la línea de código #132. El nuevo
caso deberá colocarse previo al caso default:, de esta forma, el código de la estructura
deberá quedar de la siguiente forma2:

// Analizar las selecciones de menú:


switch (wmId)
{
case IDM_ABOUT:
1
ACTIVIDAD 1: Adicione una nueva opción al menú principal llamada “Saludo” que contenga la nueva opción
del menú agregada al menú archivo.
2
Las líneas de código resaltadas en amarillo son las que deberán adicionarse a la estructura original.

Ingeniería en Computación M. C. J. Jesús Arellano Pimentel / Emanuel Marcial Castillo


4
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
case IDM_HOLA:
MessageBox(hWnd,L"Hola Windows :)", L"Mensaje", MB_OK);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}

Observe que el código que se va a ejecutar cuando se elija nueva opción del menú es la
invocación de la función MessageBox(hWnd,L"Hola Windows :)", L"Mensaje", MB_OK);
en donde el primer parámetro es el manejador a su ventana padre (que también podría
ser una valor NULL), el segundo parámetro es el mensaje que se desea mostrar, el tercer
parámetro es la leyenda de la barra de título del cuadro de mensaje, y por último el
parámetro MB_OK permite mostrar el botón Aceptar para cerrar el cuadro de mensaje3.

Paso 6 Compilar y ejecutar para visualizar los cambios


Una vez realizados los cambios de los pasos anteriores guardar el archivo y ejecutar
presionando la tecla F4. El resultado debería ser el mostrado en la Figura 5 una vez que
seleccione el la nueva opción del menú Archivo.

a ) Selección de la nueva opción del menú b) Caja de mensajes

Figura 4. Ejecución de la aplicación MenuAplicacion.


3.- Repaso de actividades

ACTIVIDAD 1: Adicione una nueva opción al menú principal llamada “Saludo” que
contenga la nueva opción del menú agregada al menú archivo.

ACTIVIDAD 2: Entre al siguiente enlace para ver la documentación de la función


MessageBox:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx
3
ACTIVIDAD 2: Entre al siguiente enlace para ver la documentación de la función MessageBox:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms645505(v=vs.85).aspx

Ingeniería en Computación M. C. J. Jesús Arellano Pimentel / Emanuel Marcial Castillo


5
4.- Referencias

[Salvador13] Salvador Pozo Coronado. Win API con Clase. Aplicaciones con API 32.
Disponible en: http://winapi.conclase.net/curso/index.php?
cap=000#RECURSOS

Ingeniería en Computación M. C. J. Jesús Arellano Pimentel / Emanuel Marcial Castillo


6

Вам также может понравиться