• Lunes 29 de Abril de 2024, 07:34

Autor Tema:  Conflicto Con El Wndproc  (Leído 1624 veces)

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Conflicto Con El Wndproc
« en: Lunes 22 de Mayo de 2006, 16:48 »
0
Buenas:

Soy nuevo en este foro.
Estoy creando una aplicacion que cuando recibe una alarma muestra una ventana con una serie de imagenes.
Para ello tengo un Procedure de Ventana que se encarga de mostrar dichas imagenes en un DialogBox que llamo insertandole parametros con el lParam.

Bien, ese lParam es un struct con todos los datos que debo mostrar.
El dialogo funciona correctamente.

Pero al mostrar un nuevo dialogo, al enviarse Mensajes de Paint o de otro tipo, TODOS los dialogos se redibujan IGUAL QUE EL ULTIMO.



Estoy buscando una solucion a esto pero siempre se agradece una ayuda, muchas gracias. Espero poder colaborar yo tambien. Hasta la proxima.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Conflicto Con El Wndproc
« Respuesta #1 en: Lunes 22 de Mayo de 2006, 20:35 »
0
humm quizas la razon sea que no entiendo bien que hacen las funciones ValidateRect e InvalidateRect, y el MSDN no me esta aclarando nada este asunto,
es posible hacer que una window no vuelva a redibujarse? o que se encarge el sistema de su redibujado?

inforsystem

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Conflicto Con El Wndproc
« Respuesta #2 en: Viernes 23 de Junio de 2006, 01:09 »
0
Hola, no entiendo muy bien tu situación, pero sobre las funciones InvalidateRect y ValidateRect puedo ayudarte, tal vez :-)
La función InvalidateRect refuerza el repintado de la ventana enviando un mesaje WM_PAINT a la ventana.
La función ValidateRect es lo contrario, es decir, evita que se envie este mensaje a la ventana.Con sólo llamar a esta función una vez, se activa hasta que le envíes manualmente la "activación de repintado" con la función InvalidateRect.
Bueno, un saludo.

diego.martinez

  • Miembro MUY activo
  • ***
  • Mensajes: 297
    • Ver Perfil
Re: Conflicto Con El Wndproc
« Respuesta #3 en: Viernes 23 de Junio de 2006, 18:00 »
0
gracias por la respuesta.

A ver, si yo uso un ValidateRect pasandole como argumento toda la ventana, el resultado es que no se deberia de alterar el contenido?

El caso es que usar el Validate me ha resuelto el problema de que al pasar la ventana se destrozara el dibujo, peeero, solo se restablece el dibujo al quitar la ventana de encima, si muevo la ventana superior, el dibujo se destripa.

La ventana que pasa por encima es un OpenChooseFileDialog, al cerrarse, todo queda bien, pero al moverla, destroza el dibujado. Esta parte es la que me desconcierta, tal como decis, y tal como creia yo, si al moverse la ventana sobre la mia, se manda el WM_PAINT, deberia de redibujarse inmediatamente y no deberia de verse el estropicio.  :(

inforsystem

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Conflicto Con El Wndproc
« Respuesta #4 en: Viernes 7 de Julio de 2006, 15:32 »
0
Hola.
Yo hice una aplicación muy parecida. Creaba una ventana principal, luego incertaba un dialogo en esa ventana llamando a la función DialogBox(..).El recurso del dialogo tenia la propiedad "child", es decir que se insertaba en la ventana principal como hija, ahora bien, despues de que la ventana perdia el foco, el dialogo desaparecia, es decir quedaba la ventana principal "sin nada". Solucion: colocar en la estructura de registro WNDCLASSEX el flag CS_SAVEBITS, heeeeeee, disculpas por no decirte en que parte de la estructura va este flag, pero estoy en un ciber y no me acuerdo en este momento.Saludos.