C/Visual C - Diálogos y controles

 
Vista:

Diálogos y controles

Publicado por Adriana Peña (7 intervenciones) el 08/08/2003 20:47:50
Holas a todos
Quisiera saber si alguien sabe como capturar los mensajes del mouse en un cuadro de diálogo, como al hacer click, mouse arriba, mouse sale.. sería para cualquier control, como un Text, CText.. etc.. etc...

Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Cómo capturar mensajes del mouse en controles de un cuadro de diálogo

Publicado por Alejandro (1286 intervenciones) el 23/07/2025 18:43:41
Adriana, para capturar eventos del mouse en controles (como `Text`, `CText`, u otros) en un cuadro de diálogo en aplicaciones MFC o WinAPI, tienes varias opciones:

1. Usar los mensajes de Windows (WM_MOUSEXXX)


Puedes manejar los mensajes de mouse en el procedimiento de ventana (WndProc) o en los manejadores de mensajes de MFC.

Por ejemplo, en MFC, puedes agregar manejadores para los mensajes:

- `WM_MOUSEMOVE` (movimiento del mouse)
- `WM_LBUTTONDOWN` (clic izquierdo)
- `WM_LBUTTONUP` (soltar clic)
- `WM_MOUSELEAVE` (salida del mouse)

2. Para controles específicos:


Debes hacer que el control reciba los mensajes de mouse. Para ello, puedes:

- Sobrescribir el procedimiento de ventana del control (si es un control personalizado).
- Usar `Subclassing`: reemplazar la ventana del control por una clase personalizada que maneje los mensajes.

3. Ejemplo en MFC:


Supongamos que tienes un control `CEdit` (o similar). Puedes:

- Agregar un manejador para los mensajes del control usando la macro `ON_WM_MOUSEMOVE()` en tu clase de diálogo.
- O, si quieres capturar en toda la ventana, manejar los mensajes en `OnMouseMove()` y otros.

Ejemplo en MFC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// En tu clase de diálogo, en el archivo .h
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
DECLARE_MESSAGE_MAP()
 
// En el archivo .cpp
BEGIN_MESSAGE_MAP(CTuDialogo, CDialogEx)
    ON_WM_MOUSEMOVE()
    ON_WM_LBUTTONDOWN()
    ON_WM_LBUTTONUP()
END_MESSAGE_MAP()
 
void CTuDialogo::OnMouseMove(UINT nFlags, CPoint point)
{
    // Aquí puedes verificar si el mouse está sobre un control específico
    // o simplemente capturar el movimiento en toda la ventana
    CDialogEx::OnMouseMove(nFlags, point);
    // Tu código aquí
}
 
void CTuDialogo::OnLButtonDown(UINT nFlags, CPoint point)
{
    // Cuando se hace clic
    CDialogEx::OnLButtonDown(nFlags, point);
    // Tu código aquí
}

4. Capturar eventos en controles específicos:


Para controles como `CEdit`, puedes:

- Hacer subclassing del control y manejar sus mensajes.
- Usar `SetWindowLongPtr()` para reemplazar su procedimiento de ventana por uno personalizado.

---

Resumen


- Usa los mensajes `WM_MOUSEXXX` en tu clase de diálogo o control.
- Para controles específicos, puedes hacer subclassing o manejar los mensajes en su procedimiento.
- En MFC, los manejadores de mensajes (`OnMouseMove`, `OnLButtonDown`, etc.) son la forma más sencilla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar