Wie kann ich einem C # -Formular Transparenz hinzufügen und gleichzeitig die Steuerelemente sichtbar halten?

AKTUALISIEREN: Ich machte eine Pause, um ein paar Tage mit dem Transparentzeug herumzuspielen. Ich habe heute Abend wieder damit angefangen. Mit der Lösung von Hans Passant habe ich ein neues Ergebnis erhalten:neues Ergebnis http://img3.imageshack.us/img3/4265/icontransp.jpg http://img3.imageshack.us/img3/4265/icontransp.jpg

Die Lösung von Passant löst das Problem des transparenten Hintergrundverlaufs. Ich habe jedoch immer noch Probleme mit den transparenten Farben in meinem Symbol, die mit der Hintergrundfarbe des Formulars verschmelzen. Sie können die Fuchsie um verschiedene Teile des Symbols im obigen Bild sehen.

ORIGINALINHALT:

Ich mache das jetzt schon einige Stunden und hatte nicht viel Glück. Ich habe mit Control.Region, Form.TransparencyKey, Form.Opacity und ein paar anderen zufälligen Dingen mit einigen funky Effekten rumgespielt.

In letzter Zeit habe ich versucht, meinen Desktop anzupassen, und mich entschlossen, mit Application Docks zu spielen. Nachdem ich gesehen hatte, was das Mac-Dock und einige Windows-Implementierungen von Drittanbietern zu bieten hatten, entschied ich mich, mein eigenes zu bauen.

Irgendwann möchte ich die Win32-API verwenden. Im Moment möchte ich nur etwas zum Laufen bringen, indem ich so viele C # - und .Net-Framework-Funktionen wie möglich verwende.

Es gibt ein paar Dinge, die ich in dieser Anwendung tun möchte:

Zeigen Sie ein Formular / Menü mit einem Hintergrund mit Farbverlauf an.Erlauben Sie dem Formular / Menü Transparenz, während die Symbole undurchsichtig bleiben.Zeigen Sie Symbole an, die transparente Hintergründe enthalten.Das Menü und die Symbole sollten Ereignisse im Zusammenhang mit der Maus empfangen können (Bewegen, Verlassen, Klicken, Ziehen, Ziehen und einige andere).

Dies ist der Effekt, für den ich fotografiere:Gewünschter Effekt http://img207.imageshack.us/img207/5716/desired.jpg http://img207.imageshack.us/img207/5716/desired.jpg

Dieses Bild zeigt die visuellen Effekte, die ich erzielen möchte. Dies war ein Skin, den ich für ein Programm namens Rainmeter erstellt habe. Das Bild zeigt Notepad ++ hinter der Skin, wobei einige der Skin-Dateien im Editor geöffnet sind. Das Menü ist transparent, aber die Symbole bleiben undurchsichtig.

Mein Ansatz:

Die Verwendung eines Formulars als Menü schien mir eine logische erste Wahl zu sein. Ich habe ein grundlegendes Verständnis von Ereignissen. Ich bin mir nicht ganz sicher, wie ich meine eigenen Klickereignisse erstellen soll. Ein Formular würde also die Arbeit mit Ereignissen ein wenig erleichtern. Ich habe ein paar Optionen für die Symbole in Betracht gezogen. Ich habe beschlossen, PictureBoxes für die Symbole zu verwenden, da sie Bilder enthalten und Ereignisse empfangen können.

Nachdem ich den Code für die gesamte strukturelle Logik meines Menüs fertiggestellt hatte, fing ich an, damit herumzuspielen, um den gewünschten visuellen Effekt zu erzielen. Form.Opacity beeinflusste die Transparenz von allem im Formular. Da ich möchte, dass die Symbole vollständig undurchsichtig sind, habe ich diese Eigenschaft in Ruhe gelassen. Ich habe versucht, BackColor auf Color.Transparent einzustellen, aber das gibt einen Fehler. Ich habe ein paar Kombinationen ausprobiert ...Kombinationseffekte http://img204.imageshack.us/img204/757/effectsi.jpg http://img204.imageshack.us/img204/757/effectsi.jpg

Ich habe den Farbverlauf mit einem Drawing2D.LinearGradientBrush in eine Bitmap gezeichnet. Diese Bitmap wurde dann als Form.BackgroundImage oder als PictureBox.Image platziert. Bei Verwendung wurde die PictureBox so dimensioniert, dass sie das gesamte Formular abdeckt und an die Rückseite gesendet.

Mir ist aufgefallen, dass ein Teil der Form.BackgroundColor mit den Umrissen meiner Symbole gemischt wird. Die Symbole sind an den Rändern transparent, um ein gleichmäßigeres Erscheinungsbild zu erzielen. Da die Symbole die BackgroundColor des Formulars aufnehmen, denke ich, dass die PictureBoxes neue Bilder erstellen, wenn die Symbole in das Formular geladen werden. Die semitransparenten Teile des Bildes werden dann mit der Hintergrundfarbe des Formulars zusammengeführt, wenn sie mit den Farben hinter dem Formular zusammengeführt werden sollen.

Effekt mit weißem Desktop http://img838.imageshack.us/img838/8299/whitedesktop.jpg http://img838.imageshack.us/img838/8299/whitedesktop.jpg

In diesem Bild sehen Sie die Fuchsie, die in den Symbolen vorhanden ist, obwohl die Fuchsiefarbe des Formulars jetzt vollständig transparent ist. Ich habe vergessen darauf hinzuweisen, dass in jedem Fall der gleiche Grün-Gelb-Gradient mit einem Alpha-Wert von 150 verwendet wurde. In den Bildern, in denen der Verlauf nicht grün aussieht, ist dies darauf zurückzuführen, dass die transparenten Farben mit dem Fuchsia-Hintergrund verschmelzen.

Ich bin mir nicht sicher, was ich von hier aus tun soll. Ich habe das Gefühl, ich könnte das bekommen, was ich will, wenn ich das Formular allein irgendwie vollständig transparent machen könnte. Ich dachte auch, ich hätte vielleicht mehr Glück, wenn ich nur die Symbole zeichne, anstatt PictureBoxes zu verwenden. Das Problem wäre dann, die Symbole so einzurichten, dass sie Mausereignisse empfangen. (Ich habe noch nie meine eigenen Ereignisse durchgeführt, und ich denke, es würde einige Win32-API-Aufrufe beinhalten.)

Kann ich mit den PictureBoxes noch etwas tun, um den gewünschten Effekt zu erzielen? Was auch immer der Fall ist, ich bin offen für Ideen oder Vorschläge für den Gesamteffekt, den ich erzielen möchte.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage