Jak mogę dodać przezroczystość do formularza c #, zachowując widoczne elementy sterujące?

AKTUALIZACJA: Przez kilka dni robiłem sobie przerwę od bałaganu z materiałami do przezroczy. Znowu zacząłem się tym bawić. Otrzymałem nowy wynik dzięki rozwiązaniu Hans Passant:nowy wynik http://img3.imageshack.us/img3/4265/icontransp.jpg http://img3.imageshack.us/img3/4265/icontransp.jpg

Rozwiązanie Passanta rozwiązuje problem przezroczystego gradientu tła. Nadal jednak występuję problem z przezroczystymi kolorami w mojej ikonie łączącej się z BackColor formularza. Możesz zobaczyć fuksję wokół różnych części ikony na powyższym obrazku.

ZAWARTOŚĆ ORYGINALNA:

Robię to już od kilku godzin i nie miałem wiele szczęścia. Zamieszałem z Control.Region, Form.TransparencyKey, Form.Opacity i kilkoma innymi przypadkowymi rzeczami z efektami funky.

Ostatnio próbowałem dostosować mój pulpit i zdecydowałem się na bałagan w Dockach aplikacji. Po zobaczeniu, co ma do zaoferowania stacja dokująca Mac i kilka implementacji Windows innych producentów, zdecydowałem, że chcę zbudować własną.

W końcu chcę przejść do używania Win32 API. Na razie chcę po prostu uzyskać coś działającego przy użyciu jak największej ilości możliwości ramowych C # i .Net.

Jest kilka rzeczy, które chcę zrobić w tej aplikacji:

Wyświetl formularz / menu z tłem gradientowym.Pozwól, aby formularz / menu był przezroczysty, a ikony były nieprzezroczyste.Wyświetl ikony zawierające przezroczyste tła.Menu i ikony powinny być w stanie odbierać zdarzenia związane z myszą (najechanie, opuszczenie, kliknięcie, przeciągnięcie, przeciągnięcie i kilka innych).

To efekt, na który strzelam:Pożądany efekt http://img207.imageshack.us/img207/5716/desired.jpg http://img207.imageshack.us/img207/5716/desired.jpg

Ten obraz pokazuje efekty wizualne, które próbuję osiągnąć. To była skóra, którą zrobiłem dla programu o nazwie Rainmeter. Obraz pokazuje Notepad ++ za skórą z kilkoma plikami skóry otwartymi w edytorze. Menu jest przezroczyste, ale ikony pozostają nieprzezroczyste.

Moje podejście:

Używanie formularza do działania jako menu wydawało mi się logicznym pierwszym wyborem. Mam podstawową wiedzę na temat wydarzeń. Nie jestem pewien, jak tworzyć własne zdarzenia kliknięć, więc formularz sprawi, że praca z wydarzeniami będzie łatwiejsza. Rozważałem kilka opcji dla ikon. Zdecydowałem, że użyję PictureBoxów dla ikon, ponieważ mogą one przechowywać obrazy i odbierać wydarzenia.

Kiedy skończyłem kod dla całej logiki strukturalnej mojego menu, zacząłem się nim bawić, aby uzyskać pożądany efekt wizualny. Form.Opacity wpłynęło na przejrzystość wszystkiego w formularzu. Ponieważ chcę, aby ikony były w pełni nieprzezroczyste, zostawiłem tę nieruchomość w spokoju. Próbowałem ustawić BackColor na Color.Transparent, ale to powoduje błąd. Grałem z kilkoma kombinacjami ...Efekty kombinacji http://img204.imageshack.us/img204/757/effectsi.jpg http://img204.imageshack.us/img204/757/effectsi.jpg

Narysowałem gradient za pomocą Drawing2D.LinearGradientBrush w mapie bitowej. Ta bitmapa została następnie umieszczona jako Form.BackgroundImage lub jako PictureBox.Image. W przypadku użycia PictureBox był tak zwymiarowany, aby zakryć cały formularz i wysłać go do tyłu.

Zauważyłem, że niektóre kolory Form.BackgroundColor zostaną zmieszane z konturami moich ikon. Ikony mają przezroczystość wzdłuż krawędzi, aby uzyskać gładszy wygląd. Ponieważ ikony pobierają BackgroundColor w formularzu, sprawia to, że myślę, że PictureBoxes tworzą nowe obrazy, gdy ikony są ładowane do formularza. Półprzezroczyste części obrazu są następnie łączone z kolorem BackgroundColor, gdy powinny się łączyć z dowolnymi kolorami za formą.

efekt z białym pulpitem http://img838.imageshack.us/img838/8299/whitedesktop.jpg http://img838.imageshack.us/img838/8299/whitedesktop.jpg

Na tym obrazku można zobaczyć Fuchsię istniejącą w ikonach, mimo że kolor Fuksji Form jest teraz całkowicie przezroczysty. Zapomniałem zaznaczyć, że w każdym przypadku użyto tego samego gradientu od zielonego do żółtego z wartością alfa 150. Na obrazach, w których gradient nie wygląda na zielony, to dlatego, że przezroczyste kolory mieszają się z tłem Fuksja.

Nie jestem pewien, co robić tutaj. Czuję, że mógłbym uzyskać to, czego chcę, gdybym mógł jakoś uczynić Formę całkowicie przezroczystą. Myślałem też, że mogę mieć lepsze szczęście rysując ikony zamiast używać PictureBoxów. Problemem byłoby wtedy ustawienie ikon do odbierania zdarzeń myszy. (Nigdy nie tworzyłem własnych wydarzeń i myślę, że wymagałoby to pewnych wywołań API Win32).

Czy jest jeszcze coś, co mogę zrobić z PictureBoxami, aby uzyskać pożądany efekt? Niezależnie od przypadku jestem otwarty na wszelkie pomysły i sugestie dotyczące ogólnego efektu, który staram się osiągnąć.

questionAnswers(2)

yourAnswerToTheQuestion