Uso de cajas de edición en Win32

Anuncio
UNIVERSIDAD DEL ISTMO
Ingeniería en computación
PROFESOR
M. en C. J. Jesús Arellano Pimentel
NOMBRE DE LA PRÁCTICA
Sumar dos números enteros en Visual C con API’s Win32.
OBJETIVO GENERAL
Aprender a crear y utilizar controles de interfaz de usuario
como botones y cajas de texto en aplicaciones Win32.
-
OBJETIVOS ESPECÍFICOS
EQUIPO REQUERIDO
SOFTWARE REQUERIDO
Crear botones y procesar el mensaje asociado a
estos.
- Crear cajas de texto para leer y mostrar datos.
- Sumar dos números enteros introducidos en cajas
de texto.
Computadora personal con 512 MB de RAM mínimo.
- Windows Vista/7/8
- Microsoft Visual Studio Express 2012 para escritorio
de Windows.
1.- Fundamentos
Los controles tipo botón simulan el comportamiento de un pulsador o un interruptor
[Pozo04]. En esta práctica solo se emplearán los de tipo pulsador los cuales permiten al
usuario ejecutar ciertas acciones para dar órdenes a una aplicación. En muchos aspectos estos
controles funcionan igual que los menús o botones de la barra de herramientas, ya que todos
estos generan el mensaje WM_COMMAND. Normalmente se componen de un área rectangular que
contiene un texto indicando la acción a realizar.
Un control de caja de texto es una ventana rectangular que permite a los usuarios
introducir y editar texto desde el teclado. Cuando este control está seleccionado muestra el
texto que contiene y un cursor intermitente que indica el punto de inserción de texto. Para
seleccionarlo el usuario normalmente da un clic con el ratón en su interior, es entonces cuando
el usuario podrá introducir o borrar texto en él. Al crear este tipo de ventanas (cajas de texto)
se pueden activar ciertas propiedades que solo permiten la edición de dígitos, también pueden
crearse para no aceptar más caracteres de los que se pueden visualizar en su tamaño o activar
el scroll vertical u horizontal.
2.- Desarrollo
2.1 Aplicación para sumar dos números introducidos a través de cajas de texto
Paso 1 Iniciar el MVS Express 2012.
Ingeniería en Computación
M. C. J. Jesús Arellano Pimentel
1
Paso 2 Crear un nuevo proyecto Win32.
Seleccionar la opción del menú Archivo->Nuevo Proyecto. Del cuadro de diálogo
Nuevo proyecto en Plantillas seleccionar Visual C++ y Win32; en tipo de aplicación
seleccionar Proyecto Win32 Visual C++ (ver Figura 1). El nombre del proyecto o
solución podría ser SumaWin32. Presionar el botón Aceptar.
Figura 1. Cuadro de diálogo Nuevo Proyecto para la aplicación SumaWin32.
Paso 3 Configurar el Proyecto Actual.
En el Asistente para aplicaciones Win32 presionar el botón siguiente; después
deshabilitar la casilla de verificación de Comprobación del ciclo de vida de desarrollo
de seguridad(SDL); finalmente oprimir el botón Finalizar.
Paso 4 Editar el código del archivo SumaWin32.cpp.
En la línea 102 de la función InitInstance correspondiente a la creación de la ventana
principal, modificar el segundo par de parámetros de la línea 103: CW_USEDEFAULT, 0
por 200, 200, respectivamente, esto definirá el tamaño inicial para la ventana en 200
pixeles en x y 200 pixeles en y.
En la función WndProc (línea 131) agregar las siguientes variables:
static HWND hBtnSumar, hEdtNum1, hEdtNum2, hEdtSuma;
En la misma función WndProc, dentro de la estructura switch, agregar el procesamiento
del mensaje WM_CREATE previo al procesamiento del mensaje WM_COMMAND con el
siguiente código:
case WM_CREATE:
hBtnSumar = CreateWindowEx(0, L"BUTTON",
/* Nombre de la clase */
L"Sumar",
/* Texto del título */
BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE |
WS_BORDER | WS_TABSTOP, /* Estilo */
10, 80,
/* Posición */
80, 34,
/* Tamaño */
hWnd,
/* Ventana padre */
(HMENU)ID_BTNSUMAR,/*Identificador del control */
Ingeniería en Computación
M. C. J. Jesús Arellano Pimentel
2
hInst,
NULL);
/* Instancia */
/* Sin datos de creación*/
hEdtNum1 = CreateWindowEx(0,
L"EDIT",
/* Nombre de la clase */
L"",
/* Sin texto de título */
ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER |
WS_TABSTOP | ES_NUMBER, /* Estilo */
10, 45,
/* Posición */
35, 25,
/* Tamaño */
hWnd,
/* Ventana padre */
(HMENU)ID_EDTNUM1,/* Identificador del control */
hInst,
/* Instancia */
NULL);
/* Sin datos de creación*/
hEdtNum2 = CreateWindowEx(0,
L"EDIT",
/* Nombre de la clase */
L"",
/* Sin texto de título*/
ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER |
WS_TABSTOP | ES_NUMBER, /* Estilo */
65, 45,
/* Posición */
35, 25,
/* Tamaño */
hWnd,
/* Ventana padre */
(HMENU)ID_EDTNUM2,/* Identificador del control */
hInst,
/* Instancia */
NULL);
/* Sin datos de creación */
hEdtSuma = CreateWindowEx(0,
L"EDIT",
/* Nombre de la clase */
L"",
/* Sin texto de título */
ES_LEFT | WS_CHILD | WS_VISIBLE | WS_BORDER |
WS_TABSTOP | ES_NUMBER | ES_READONLY,/* Estilo */
120, 45,
/* Posición */
35, 25,
/* Tamaño */
hWnd,
/* Ventana padre */
(HMENU)ID_EDTSUMA,/* Identificador del control */
hInst,
/* Instancia */
NULL);
/* Sin datos de creación */
SetFocus(hEdtNum1);
break;
En la misma función WndProc, pero ahora dentro de la estructura switch que pertenece
al procesamiento del mensaje WM_COMMAND, codificar la pulsación del botón sumar:
case ID_BTNSUMAR:
{
TCHAR szNum1[32], szNum2[32], szSuma[32];
int num1, num2, suma;
/*Obtiene el texto y lo convierte de texto a entero*/
GetDlgItemText(hWnd, ID_EDTNUM1, szNum1, 31);
num1 = _tstoi(szNum1);
/*Obtiene el texto y lo convierte de texto a entero*/
GetDlgItemText(hWnd, ID_EDTNUM2, szNum2, 31);
num2 = _tstoi(szNum2);
suma = num1 + num2;
_tcprintf(szSuma,L"%d",suma);
SetDlgItemText(hWnd,ID_EDTSUMA,szSuma);
}
break;
Ingeniería en Computación
M. C. J. Jesús Arellano Pimentel
3
Ya por último, en esta misma función (WndProc) modificar el código del procesamiento
para mensaje WM_PAINT de tal forma que quede como el siguiente código:
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: agregar código de dibujo aquí...
TextOut(hdc,10,30,L"Num1",_tclen(L"Num1"));
TextOut(hdc,50,48,L"+",_tclen(L"+"));
TextOut(hdc,65,30,L"Num2",_tclen(L"Num2"));
TextOut(hdc,105,48,L"=",_tclen(L"="));
TextOut(hdc,120,30,L"Suma",_tclen(L"Suma"));
EndPaint(hWnd, &ps);
break;
Paso 5 Agregar las constantes simbólicas asociadas a los recursos en el archivo Resource.h.
En segmentos de código anterior se han utilizado constantes simbólicas asociadas a los
recursos (las tres cajas de edición y el botón), por lo que es necesario agregarlas en el
segmento de // Valores predeterminados siguientes para nuevos objetos con las
siguientes líneas de código (constantes simbólicas):
// Valores predeterminados siguientes para nuevos objetos
//
#define ID_BTNSUMAR
201
#define ID_EDTNUM1
202
#define ID_EDTNUM2
203
#define ID_EDTSUMA
204
Paso 6 Guardar y Compilar
Guardar todos los dos archivos modificados y Compilar. La ejecución de la aplicación
se muestra en la Figura 2. Note que las propiedades de las dos primeras cajas de texto
solo permiten introducir dígitos, mientras que tercer caja no permiten la edición, solo
permiten mostrar texto.
Figura 2. Ventana de la aplicación SumaWin32.
Ingeniería en Computación
M. C. J. Jesús Arellano Pimentel
4
3.- Ejercicios
3.1 Realizar las cuatro operaciones aritméticas básicas
Crear tres botones más para poder realizar las cuatro operaciones aritméticas básicas de
sumar, restar, multiplicar y dividir. Sustituir el símbolo de “+” por la operación que se realice
según el botón pulsado.
4.- Referencias
[Pozo04]
Pozo Coronado Salvador. Win API con Clase. Aplicaciones con API 32. Julio
de 2004. Disponible en: http://winapi.conclase.net
Ingeniería en Computación
M. C. J. Jesús Arellano Pimentel
5
Descargar