Computadoras
Existen una serie de controles que tienen la función de interactuar con el usuario. Un control es un tipo especial de ventana que permite un tipo específico de interacción del usuario. Por ahora nos concentraremos en 3 de los controles más utilizados en Windows: control etiqueta, control caja de texto y control botón.
|
fig. 6.1.1 Ventana generada con elPrograma5.cpp |
Antes de analizar líneas de código e introducirle en la teoría, me gustaría que viese el resultado de generar el Programa5.cpp ya que así le será más fácil imaginar el alcance de este capítulo. Para generar una ventana como la que se muestra en la figura anterior, es necesario seguir los siguientes pasos:
1. Abrir el entorno de desarrollo (en mi caso Dev-C++)
2. Crear un nuevoproyecto Windows (ver apéndice B.1) que llamaremos Ejercicio5.
3. Agregar un Archivo de encabezado a nuestro proyecto (ver apéndice B.2) al que llamaremos ventana.h (todo en minúsculas). Este archivo lo reutilizaremos en otros proyectos para ahorrar líneas de código.
ventana.h | Copiar cógido |
#include <windows.h>
HWND CreaVentana(char szNombreAplicacion[], int ancho, int alto,HINSTANCE hInstancia, WNDPROC ProcedimientoVentana)
{
HWND hwnd;
WNDCLASSEX ventana;
//Configuramos la ventana
ventana.cbSize = sizeof(ventana);
ventana.style = CS_HREDRAW | CS_VREDRAW;
ventana.lpfnWndProc = ProcedimientoVentana;
ventana.hInstance = hInstancia;
ventana.lpszClassName = szNombreAplicacion;
ventana.hIcon = LoadIcon (NULL, IDI_APPLICATION); ventana.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
ventana.hCursor = LoadCursor (NULL, IDC_ARROW);
ventana.lpszMenuName = NULL;
ventana.cbClsExtra = 0;
ventana.hbrBackground = (HBRUSH) (COLOR_BTNFACE+1);
ventana.cbWndExtra = 0;
// Registrar la clase de ventana, si falla, salir del programa
if(!RegisterClassEx(&ventana)) return (FALSE);
hwnd =CreateWindowEx(
0,
szNombreAplicacion, //Nombre de clase de la ventana a la que pertenece
szNombreAplicacion, //Título de la ventana
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
ancho, //Ancho
alto, //Alto
HWND_DESKTOP,
NULL,
hInstancia,
NULL);
ShowWindow(hwnd, SW_SHOWNORMAL);
return hwnd;
}
4. Agregar un Archivo C++ a nuestro proyecto (ver apéndice B.2) al que llamaremos Programa5.cpp.
5. Escribir el siguiente código en el archivo Programa5.cpp. Puede hacer uso del Copy&Paste para agilizar, más adelante analizaremos las partes del código correspondientes a la creación decontroles.
Programa5.cpp | Copiar cógido |
#include "ventana.h"
// Se encarga de informar si hubo un error al crear el control
// y cambia la fuente por la predeterminada en el Panel de Control
HWND Control(HWND hwndHija, HWND hwndPadre)
{
if (hwndHija == NULL)
MessageBox(hwndPadre, "No se puede crear el control.", "¡Error!",
MB_OK | MB_ICONERROR);
else
SendMessage(hwndHija, WM_SETFONT, (WPARAM) GetStockObject(DEFAULT_GUI_FONT),
MAKELPARAM(FALSE, 0));
return hwndHija;
}
// Crea una Etiqueta o Labelbox
//==============================
HWND Etiqueta(HWND hPadre, LPSTR texto, int x, int y, int ancho, int alto)
{
HWND hEtiqueta;
hEtiqueta = CreateWindowEx(NULL, "STATIC", texto, WS_CHILD | WS_VISIBLE,
x, y, ancho, alto, hPadre, NULL, NULL, NULL);
return Control(hEtiqueta, hPadre);
}
// Crea una Caja de Texto o Textbox
//==================================
HWND Caja_Texto(HWND hPadre, LPSTR texto, int x, int y, int ancho, int alto)
{
HWND hCaja_Texto;
hCaja_Texto = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", texto,
WS_CHILD | WS_VISIBLE |...
Regístrate para leer el documento completo.