• Sábado 14 de Diciembre de 2024, 17:54

Autor Tema:  Redibujar Cuando Una Ventana Pasa Por Encima  (Leído 1986 veces)

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Redibujar Cuando Una Ventana Pasa Por Encima
« en: Lunes 12 de Junio de 2006, 18:16 »
0
Se genera alguna notificacion WIN32 cuando una ventana pasa por encima de otra?
gracias

ivancp

  • Miembro activo
  • **
  • Mensajes: 70
    • Ver Perfil
Re: Redibujar Cuando Una Ventana Pasa Por Encima
« Respuesta #1 en: Martes 13 de Junio de 2006, 04:41 »
0
Creo que el unico evento que se envia es el de repintado de sectores que lo necesitan.

Prueba con las funciones OnPaint  ú OnDraw, ó el mensaje WM_PAINT.
ivancp                

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Redibujar Cuando Una Ventana Pasa Por Encima
« Respuesta #2 en: Martes 13 de Junio de 2006, 16:40 »
0
Gracias por la respuesta, el fallo fue mio que no me explique bien.

La cosa es que tengo unas ventanas dibujadas a manita enteras usando GDI en el WM_PAINT.

Y dibujan y redibujan perfectamente cuando salen del monitor, se mueven ... etc.

El problema es que cuando paso una ventana por encima, me genera lineas grises (de no dibujado) sobre la ventana de debajo.

La idea era detectar si una ventana iba a pasar por encima para invalidar el contenido y mandar el mensaje de WM_PAINT.

Yo creo que realmente, al pasar por encima, se manda el WM_PAINT pero el hecho de que no se dibuje bien... no lo entiendo...

gracias.

ivancp

  • Miembro activo
  • **
  • Mensajes: 70
    • Ver Perfil
Re: Redibujar Cuando Una Ventana Pasa Por Encima
« Respuesta #3 en: Lunes 19 de Junio de 2006, 22:01 »
0
Creo que con la tecnica de double buffering solucionas tu problema:

http://www.latindevelopers.com/vcpp/bitmap/doble-buffer/
ivancp                

inforsystem

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Redibujar Cuando Una Ventana Pasa Por Encima
« Respuesta #4 en: Viernes 23 de Junio de 2006, 01:20 »
0
Hola. Cuando una ventana se superpone sobre otra se envía el mensaje WM_PAINT  a la ventana incativa,con la estructura LPPAINTSTRUCT en el parametro LPARAM, entonces, puedes saber exactamente donde se ha superpuesto la otra vantana(activa).Además puedes colocar la función ValidateRect[...] al final del bloque WM_PAINT.
Saludos.

inforsystem

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Redibujar Cuando Una Ventana Pasa Por Encima
« Respuesta #5 en: Viernes 23 de Junio de 2006, 01:29 »
0
Hola a todos.
Sobre el doble bufer (para evitar el parpadeo al dibujar), los pasos serian los siguientes:
1-Obtener el Contexto de Dispositivo de nuestra ventana.
2-Crear un nuevo Contexto de Dispositivo compatible con el de la ventana que creamos.
3-Dibujar sobre éste nuevo Contexto de Dispositivo.
4-Finalmente copiar desde el Contexto de Dispoditivo nuevo, hacia el Contexto de Dispositivo de nuestra ventana.
*****************************
HDC hdcBackBuffer;
HDC hdcWin;
....
hdcWin = GetDC(hWnd);
hdcBackBuffer = CreateCompatibleDC(hdcWin);
....
//Recuerda: dibujar en el hdcBackBuffer y luego copiar a hdcWin;

Un saludo.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Redibujar Cuando Una Ventana Pasa Por Encima
« Respuesta #6 en: Viernes 23 de Junio de 2006, 16:31 »
0
muchas gracias por vuestras respuestas, voy a probarlo.  :lol: