Ich versuche, ein Formular zu zeichnen, das einen transparenten Hintergrund und einen verschwommenen Schlagschatten von einem Hauptkörper hat.Winforms transparentes Formular Problem
Die Art, wie ich dies getan habe, ist das Formular als Begrenzungsrahmen zu verwenden, dann den Körper des tatsächlichen Formulars mit dem Rand auf den Seiten zu zeichnen, damit der Schatten angezeigt wird. Der Schatten dehnt sich hinter dem gezeichneten Körper aus.
Also, ich habe 1 Formular, in dem ich innen zeichnen. Ich möchte, dass der Hintergrund des Formulars transparent ist, sodass nur der gezeichnete Körper und der Schatten angezeigt werden.
Ich habe ein paar Probleme mit dem Schatten. Der Schatten ist eine Bitmap, in der ich AForges Gaußsche Unschärfe anwende, um den Schatteneffekt zu erzeugen. Die Bitmap wird hinter dem gezeichneten Körper platziert, sodass sie als Schatten erscheint.
Hier ist das Problem: Die Hintergrundfarbe des Formulars bleibt gezeichnet, wo der Schatten ist. Die Schatten-Bitmap ist bis auf die unscharfen Schwarztöne transparent.
Ich habe versucht, backcolor auf transparent, oder eine misc-Farbe und dann transparencykey auf die gleiche Farbe einzustellen. Ergebnisse bleiben gleich.
Bild von dem, was ich erreichen möchte:
(hellrosa nicht Teil des Programms ist es, sich vorstellen, es als Desktop)
Bild von dem, was ich erhalte:
(Ich zeichne nur den Schatten für dieses Beispiel, nicht den weißen Körper (was gut funktioniert), der Hintergrund des Formulars weigert sich transparent zu werden, wo der Schatten existiert ..)
Dies ist der Code zum Erstellen der Schatten-Bitmap.
private void _CreateShadow()
{
shadowImg = new Bitmap(m_ShadowRect.Width, m_ShadowRect.Height, PixelFormat.Format32bppArgb);
Graphics g = Graphics.FromImage(shadowImg);
int diameter = Math.Min(shadowImg.Width, shadowImg.Height);
g.DrawEllipse(m_ShadowPen, m_ShadowWidth, m_ShadowWidth, m_BodyRect.Width - m_ShadowWidth, m_BodyRect.Height - m_ShadowWidth);
filter.ApplyInPlace(shadowImg);
}
private void _DrawShadow(Graphics g)
{
g.DrawImage(shadowImg, m_ShadowRect.X, m_ShadowRect.Y);
}
protected override void OnPaint(PaintEventArgs pe)
{
base.OnPaint(pe);
_DrawShadow(pe.Graphics);
_DrawBody(pe.Graphics);
}
Bitte, irgendwelche Hinweise?
Sie können Layered Windows verwenden. Die Verwendung eines Ebenenfensters kann die Leistung und die visuellen Effekte für ein Fenster, das eine komplexe Form hat, seine Form animiert oder Alpha-Überblendungseffekte verwenden kann, erheblich verbessern. Hier ist ein Beispiel, das ein geformtes Formular mit einem PNG - Bild erstellt: [C# Windows Form Transparent Background Image] (http://StackOverflow.com/a/33531201/3110834) –
@RezaAghaei Vielen Dank, dieser Ansatz ist der gleiche wie der eine kommentierte unten. Große Antwort –