Como posso adicionar transparência a um formulário c # mantendo os controles visíveis?

ATUALIZAR: Eu tirei uma folga de mexer com o material de transparência por alguns dias. Eu comecei a brincar com isso de novo hoje à noite. Eu obtive um novo resultado usando a solução de Hans Passant:novo resultado http://img3.imageshack.us/img3/4265/icontransp.jpg http://img3.imageshack.us/img3/4265/icontransp.jpg

A solução do Passant resolve a questão do gradiente de fundo transparente. No entanto, ainda estou correndo para o problema com as cores transparentes do meu ícone combinando com o BackColor do formulário. Você pode ver a fúcsia em torno de várias partes do ícone na imagem acima.

CONTEÚDO ORIGINAL:

Eu tenho trabalhado nisso há várias horas e não tive muita sorte. Eu mexi com Control.Region, Form.TransparencyKey, Form.Opacity e algumas outras coisas aleatórias com alguns efeitos funky.

Ultimamente eu tenho tentado personalizar meu desktop e decidi mexer com o Application Docks. Depois de ver o que o Mac dock e algumas implementações do Windows de terceiros tinham a oferecer, decidi que queria construir o meu.

Eventualmente, quero continuar usando a API do Win32. Por enquanto eu só quero algo trabalhando usando tanto C # e capacidades de framework .net quanto possível.

Existem algumas coisas que eu quero poder fazer nesta aplicação:

Exibe um formulário / menu com um fundo gradiente.Permitir que o formulário / menu tenha transparência, mantendo os ícones opacos.Exibe ícones que contêm fundos transparentes.O Menu e os ícones devem ser capazes de receber eventos relacionados ao mouse (passe o mouse, saia, clique, arrastar, arrastar e alguns outros).

Este é o efeito para o qual estou fotografando:Efeito Desejado http://img207.imageshack.us/img207/5716/desired.jpg http://img207.imageshack.us/img207/5716/desired.jpg

Esta imagem mostra os efeitos visuais que estou tentando alcançar. Esta foi uma pele que fiz para um programa chamado Rainmeter. A imagem mostra o Notepad ++ atrás da pele com alguns dos arquivos da pele abertos no editor. O menu é transparente, mas os ícones permanecem opacos.

Minha abordagem:

Usando um formulário para atuar como o menu parecia uma primeira escolha lógica para mim. Eu tenho uma compreensão básica dos eventos. Não sei bem como criar meus próprios eventos de cliques, portanto, um formulário facilitaria o trabalho com os eventos. Eu considerei algumas opções para os ícones. Decidi usar os PictureBoxes para os ícones, pois eles podem conter imagens e receber eventos.

Quando terminei o código para toda a lógica estrutural do meu menu, comecei a brincar com ele para tentar obter o efeito visual que queria. Form.Opacity afetou a transparência de tudo no formulário. Desde que eu quero os ícones para ser totalmente opaco, deixei esta propriedade sozinho. Eu tentei definir o BackColor para Color.Transparent, mas isso dá um erro. Eu brinquei com algumas combinações ...Efeitos combinados http://img204.imageshack.us/img204/757/effectsi.jpg http://img204.imageshack.us/img204/757/effectsi.jpg

Eu desenhei o gradiente com um Drawing2D.LinearGradientBrush em um Bitmap. Este mapa de bits foi colocado como o Form.BackgroundImage ou como um PictureBox.Image. Se usado, o PictureBox foi dimensionado para cobrir todo o formulário e enviado para trás.

Notei que alguns dos Form.BackgroundColor seriam misturados com os contornos dos meus ícones. Os ícones têm transparência ao longo das bordas para uma aparência mais suave. Como os ícones estão captando o BackgroundColor do Form, isso me faz pensar que os PictureBoxes estão criando novas imagens quando os ícones são carregados no formulário. As partes semitransparentes da imagem são então mescladas com o BackgroundColor do Form quando elas devem se fundir com as cores que estiverem por trás do formulário.

efeito com área de trabalho branca http://img838.imageshack.us/img838/8299/whitedesktop.jpg http://img838.imageshack.us/img838/8299/whitedesktop.jpg

Nesta imagem você pode ver o Fuchsia existente nos ícones, embora a cor Fúcsia do Formulário esteja agora completamente transparente. Eu esqueci de apontar que o mesmo gradiente verde para amarelo com um valor de Alfa de 150 foi usado em todos os casos. Nas imagens em que o gradiente não parece verde, é porque as cores transparentes estão se misturando ao fundo fúcsia.

Eu não tenho certeza do que fazer daqui. Eu sinto que poderia conseguir o que eu quero, se eu pudesse de alguma forma tornar a Forma completamente transparente. Eu também estava pensando que eu poderia ter mais sorte apenas desenhando os ícones em vez de usar PictureBoxes. O problema, então, seria configurar os ícones para receber eventos do mouse. (Eu nunca fiz meus próprios eventos, e acho que envolveria algumas chamadas de API do Win32.)

Há algo mais que eu possa fazer com os PictureBoxes para obter o efeito que eu quero? Seja qual for o caso, estou aberto a quaisquer ideias ou sugestões para o efeito geral que estou tentando alcançar.

questionAnswers(2)

yourAnswerToTheQuestion