Lo que tengo ahora: mi aplicación en C# es medio transparente, y no detecta eventos winapi - cada clic, arrastre, etc. es capturado por la ventana subyacente, que es una aplicación separada (como webbrower). Utilizo esto para superponer información sobre lo que muestra el navegador. Este es mi código para esto:forward winapi events a otra ventana
int exstyle = GetWindowLong(this.Handle, GWL_EXSTYLE);
exstyle |= WS_EX_TRANSPARENT;
SetWindowLong(this.Handle, GWL_EXSTYLE, exstyle);
IntPtr hwndf = this.Handle;
IntPtr hwndParent = GetDesktopWindow();
SetParent(hwndf, hwndParent);
Pero ahora, me gustaría enviar a todos los eventos tanto mi ventana de la aplicación (que es semitransparente en la parte superior) y el navegador web (en mi aplicación). Entonces, por ejemplo, si hago clic, el clic funciona en ambas ventanas como si estuvieran en la parte superior. Me imagino que la única manera de hacerlo es detectar todos los eventos y luego reenviarlos a la ventana inferior, pero ¿hay alguna manera de hacerlo? Uso winforms como window lib.
Lo que hago ahora no es tan importante, porque normalmente quiero consumir eventos, y luego reenviarlos a la ventana subyacente. Entonces, esto es algo completamente diferente de lo que estoy haciendo ahora con WS_EX_TRANSPARENT. El objetivo de esto es arrastrar contenido en ambas ventanas simultáneamente. Si hay alguna forma mejor de hacerlo, me gustaría escucharlo.
Como mínimo lo que necesito es la transferencia de los eventos de arrastre a las dos ventanas, y todos los demás eventos de ventana subyacente (que no están bajo mi control). Entonces, tal vez será más fácil quedarse con mi ventana como WS_EX_TRANSPARENT (hace que los eventos pasen a través de la ventana subyacente) y simplemente instale el enlace global para recibir eventos de arrastre. ¿Qué piensas?
BTW no tengo experiencia con Winapi, por lo que la solución puede ser obvia.
I don' Entiendo cómo no está recibiendo eventos ... ¿está creando una ventana real (debería)? O simplemente dibujando directamente en la pantalla (¡no debería!)? – tenfour
@tenfour Configurando el estilo 'WS_EX_TRANSPARENT'. – Neil
@tenfour sí, utilizo la ventana creada por .NET winform, y el dibujo es manejado por winform, por lo que es una ventana creada. Solo configuro un estilo WS_EX_TRANSPARENT y configuré la ventana padre como escritorio, lo que hace que el evento pase a la ventana subyacente, como aquí: http://www.codeproject.com/Articles/12877/Transparent-Click-Through-Forms y sí, hace que los mensajes no entren en la ventana, siempre y cuando la ventana sea directamente del escritorio. – Deadeye