SoloCodigo

Programación General => C/C++ => Visual C++ => Mensaje iniciado por: diego.martinez en Lunes 22 de Mayo de 2006, 16:48

Título: Conflicto Con El Wndproc
Publicado por: diego.martinez en Lunes 22 de Mayo de 2006, 16:48
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.
Título: Re: Conflicto Con El Wndproc
Publicado por: diego.martinez en Lunes 22 de Mayo de 2006, 20:35
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?
Título: Re: Conflicto Con El Wndproc
Publicado por: inforsystem en Viernes 23 de Junio de 2006, 01:09
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.
Título: Re: Conflicto Con El Wndproc
Publicado por: diego.martinez en Viernes 23 de Junio de 2006, 18:00
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.  :(
Título: Re: Conflicto Con El Wndproc
Publicado por: inforsystem en Viernes 7 de Julio de 2006, 15:32
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.