2008-09-21 6 views
14

Hice un panel y lo configuré para llenar la pantalla, ahora puedo ver las ventanas debajo de él pero quiero que se haga clic, lo que significa que pueden hacer clic en un archivo o ver una información sobre herramientas de otro objeto a través de la transparencia.Haga clic a través de la transparencia para los formularios de ventana de Visual C#?

RE: Esto puede ser demasiado obvio, pero ¿ha intentado enviar el panel a la parte posterior haciendo clic derecho y seleccionando "Enviar al fondo"?

me refiero como el escritorio o Firefox, no es algo dentro de mi proyecto.

Respuesta

21

Crear un formulario de nivel superior que sea transparente es muy fácil. Simplemente haga que llene la pantalla, o el área requerida, y defínalo para que tenga un color TransparenyKey y BackColor del mismo valor.

Hacer que ignorar el mouse sea lo suficientemente simple, solo tiene que anular el WndProc y decirle al WM_HITTEST que todas las posiciones del mouse se deben tratar como transparentes. Lo que hace que el mouse interactúe con lo que sea que esté debajo de la ventana. Algo como esto ...

protected override void WndProc(ref Message m) 
    { 
     if (m.Msg == (int)WM_NCHITTEST) 
      m.Result = (IntPtr)HTTRANSPARENT; 
     else 
      base.WndProc(ref m); 
    } 
+1

¿Dónde poner el código? Cuando lo puse en InitializeCoponets, no funcionó. Ni siquiera llamé una vez. – Hooch

+0

Puesto en la clase de formulario. Por cierto, WM_NCHITTEST = 0x84 y HTTRANSPARENT = -1. ¡¡¡Funciona!!! : D – Pedro77

+1

Curiosamente, esto no funcionó para mí en Win8 usando una ventana [en capas] (http://msdn.microsoft.com/en-us/library/ms997507.aspx): los elementos se pasarían, pero los clics se activarían mi ventana en lugar de pasar. Lo que funcionó en su lugar fue [configurar WS_EX_TRANSPARENT] (http://stackoverflow.com/a/2798294/33080). –

Cuestiones relacionadas