¿Cómo puedo agregar transparencia a un formulario c # mientras mantengo los controles visibles?

ACTUALIZAR: Tomé un descanso de jugar con la transparencia por unos días. Comencé a meterme con eso otra vez esta noche. Obtuve un nuevo resultado usando la solución de Hans Passant:nuevo resultado http://img3.imageshack.us/img3/4265/icontransp.jpg http://img3.imageshack.us/img3/4265/icontransp.jpg

La solución de Passant resuelve el problema del degradado de fondo transparente. Sin embargo, todavía estoy teniendo problemas con los colores transparentes de mi icono que se mezclan con el BackColor del formulario. Puede ver el fucsia alrededor de varias partes del ícono en la imagen de arriba.

CONTENIDO ORIGINAL:

He estado en esto por varias horas y no he tenido mucha suerte. Me he metido con Control.Region, Form.TransparencyKey, Form.Opacity, y un par de cosas aleatorias con algunos efectos funky.

Últimamente he estado tratando de personalizar mi escritorio y decidí meterme con Application Docks. Después de ver lo que Mac Dock y algunas implementaciones de Windows de terceros tenían para ofrecer, decidí que quería construir la mía.

Eventualmente quiero seguir usando la API de Win32. Por ahora solo quiero que algo funcione con la mayor cantidad posible de capacidades de C # y .Net.

Hay algunas cosas que quiero poder hacer en esta aplicación:

Muestra un formulario / menú con un fondo degradado.Permita que el formulario / menú tenga transparencia mientras mantiene los iconos opacos.Muestra iconos que contienen fondos transparentes.El menú y los iconos deben poder recibir eventos relacionados con el mouse (desplazar, dejar, hacer clic, dragar, arrastrar y otros).

Este es el efecto que estoy buscando:Efecto deseado http://img207.imageshack.us/img207/5716/desired.jpg http://img207.imageshack.us/img207/5716/desired.jpg

Esta imagen muestra los efectos visuales que estoy tratando de lograr. Esta fue una piel que hice para un programa llamado Rainmeter. La imagen muestra Notepad ++ detrás de la máscara con algunos de los archivos de máscara abiertos en el editor. El menú es transparente, pero los iconos permanecen opacos.

Mi acercamiento:

Usar un formulario para actuar como el menú me pareció una primera opción lógica. Tengo una comprensión básica de los eventos. No estoy muy seguro de cómo crear mis propios eventos de clics, por lo que un formulario haría que trabajar con eventos sea un poco más fácil. Consideré algunas opciones para los iconos. Decidí que usaría PictureBoxes para los íconos, ya que pueden contener imágenes y recibir eventos.

Una vez que terminé el código para toda la lógica estructural de mi menú, comencé a jugar con él para intentar obtener el efecto visual que quería. Form.Opacity afectó la transparencia de todo en el formulario. Como quiero que los iconos sean completamente opacos, dejé esta propiedad solo. Intenté configurar el BackColor en Color.Transparent, pero eso da un error. Jugué con algunas combinaciones ...Efectos combinados http://img204.imageshack.us/img204/757/effectsi.jpg http://img204.imageshack.us/img204/757/effectsi.jpg

Dibujé el gradiente con un Drawing2D.LinearGradientBrush en un mapa de bits. Este mapa de bits se colocó entonces como Form.BackgroundImage o como PictureBox.Image. Si se utiliza, el PictureBox se dimensionó para cubrir todo el formulario y se envió a la parte posterior.

Noté que algunos de los Form.BackgroundColor se mezclarían con los contornos de mis íconos. Los iconos tienen transparencia a lo largo de los bordes para una apariencia más suave. Ya que los iconos están recogiendo el Color de fondo del formulario, esto me hace pensar que los PictureBoxes están creando nuevas imágenes cuando los iconos se cargan en el formulario. Las partes semitransparentes de la imagen se fusionan con el Color de fondo del formulario cuando deben fusionarse con cualquier color que se encuentre detrás del formulario.

efecto con el escritorio blanco http://img838.imageshack.us/img838/8299/whitedesktop.jpg http://img838.imageshack.us/img838/8299/whitedesktop.jpg

En esta imagen puede ver el fucsia existente en los iconos, aunque el color fucsia del formulario ahora es completamente transparente. Olvidé señalar que en todos los casos se utilizó el mismo gradiente de verde a amarillo con un valor Alfa de 150. En las imágenes donde el degradado no se ve verde, se debe a que los colores transparentes se mezclan con el fondo fucsia.

No estoy muy seguro de qué hacer desde aquí. Siento que podría obtener lo que quiero si de alguna manera pudiera hacer que el Formulario solo sea completamente transparente. También pensé que podría tener más suerte simplemente dibujando los íconos en lugar de usar PictureBoxes. El problema entonces sería configurar los íconos para recibir eventos del mouse. (Nunca he hecho mis propios eventos, y creo que involucraría algunas llamadas a la API Win32).

¿Hay algo más que pueda hacer con los PictureBoxes para obtener el efecto que quiero? Cualquiera que sea el caso, estoy abierto a cualquier idea o sugerencia para el efecto general que estoy tratando de lograr.

Respuestas a la pregunta(2)

Su respuesta a la pregunta