Uso de Visual Studio para depuración
Visual Studio es un entorno de desarrollo integrado (IDE) que se utiliza para desarrollar, depurar y desplegar software. En este ejercicio, emplearemos Visual Studio para escribir y depurar aplicaciones MFC (Microsoft Foundation Classes). Para la depuración en Visual Studio, podemos: - Insertar puntos de interrupción: Pausan la ejecución del programa para inspeccionar valores de variables y rastrear el flujo del código. - Depuración paso a paso: Usando F11, se ejecuta línea por línea para entender mejor el proceso. - Monitoreo de variables: Se puede seguir su valor durante la sesión de depuración. - Ventana de salida: Para mostrar información de depuración. ### Mecanismo de mapeo de mensajes en MFC
El mapeo de mensajes en MFC gestiona las notificaciones de ventana. Por ejemplo, cuando se mueve el ratón o se presiona una tecla, MFC invoca automáticamente la función correspondiente. Para crear un mapeo de mensajes: 1. Declarar funciones de manejo de mensajes en el archivo de cabecera de la clase principal de diálogo. 2. Añadir entradas al mapa de mensajes asociadas con estas funciones. Las funciones deben seguir reglas de nomenclatura específicas, como OnMouseMovement() y OnKeyPress(). ### Gestión de eventos de ratón y teclado en MFC
En MFC, los eventos de ratón y teclado se gestionan mediante mapeos de mensajes: - Eventos de ratón: - Movimiento (OnMouseMovement()): Activa cuando el ratón se mueve. - Clic izquierdo (OnLeftClick()): Activa al hacer clic con el botón izquierdo. - Clic derecho (OnRightClick()): Activa al hacer clic con el botón derecho. - Eventos de teclado: - Tecla presionada (OnKeyPress()): Activa al presionar una tecla. GetKeyState() verifica si están presionadas teclas como SHIFT o CTRL. Objetivos del ejercicio
- Familiarizarse con métodos de depuración en Visual Studio. 2. Entender el uso del mapeo de mensajes en MFC. 3. Manejar eventos de ratón y teclado en aplicaciones MFC. Contenido del ejercicio
Desarrollar un porgrama que muestra la posición del ratón y muestra cuál tecla fue presionada cuando se pulsan SHIFT o CTRL. Implementación del código
Crear un proyecto llamado AppEjemplo y añadir los siguientes eventos: #### Evento de movimiento del ratón
void AppEjemploView::OnMouseMovement(UINT flags, CPoint pos)
{
CView::OnMouseMovement(flags, pos);
auto dc = GetDC();
CBrush fondo(RGB(255, 255, 255));
dc->SelectObject(&fondo);
dc->PatBlt(0, 0, 500, 500, WHITENESS);
CString texto;
texto.Format(TEXT("Ratón en (%d, %d)"), pos.x, pos.y);
dc->SetTextColor(RGB(0, 0, 0));
dc->TextOut(100, 100, texto);
}
Eventos de clics del ratón
void AppEjemploView::OnLeftClick(UINT flags, CPoint pos)
{
MessageBox(TEXT("Clic izquierdo!"));
CView::OnLeftClick(flags, pos);
}
void AppEjemploView::OnRightClick(UINT flags, CPoint pos)
{
MessageBox(TEXT("Clic derecho!"));
CView::OnRightClick(flags, pos);
}
Evento de tecla presionada
void AppEjemploView::OnKeyPress(UINT key, UINT repeticiones, UINT flags)
{
switch(key)
{
case VK_SHIFT:
MessageBox(TEXT("Tecla Shift presionada!"));
break;
case VK_CONTROL:
MessageBox(TEXT("Tecla Ctrl presionada!"));
}
CView::OnKeyPress(key, repeticiones, flags);
}
Pintar la posición inicial del cursor
void AppEjemploView::OnPaint()
{
CPaintDC contexto(this);
CPoint posicion;
GetCursorPos(&posicion);
CString mensaje;
mensaje.Format(TEXT("Ratón en (%d, %d)"), posicion.x, posicion.y);
contexto.TextOut(100, 100, mensaje);
}