Es kann schwierig sein, einen transparenten Hintergrund mit glatten Kanten für ein Windows Form zu erzielen. Dieser Artikel beschreibt zwei wirksame Lösungen.
Für Formen mit komplizierten Formen bieten mehrschichtige Fenster die beste Lösung. Sie optimieren die Fensterkomposition und das Neuanstreichen und sorgen so für eine gleichmäßige Wiedergabe ohne das Flackern, das oft bei komplexen Formen auftritt. Entscheidend ist, dass sie auch die Transluzenz unterstützen.
Implementieren von mehrschichtigen Windows
Um ein mehrschichtiges Fenster in Windows Forms zu erstellen, verwenden Sie Code aus der Microsoft SDK-Codegalerie (Link zum Code, falls verfügbar). Durch Erweitern der Klasse PerPixelAlphaForm
können Sie die Methode SelectBitmap
verwenden, um Ihr transparentes PNG-Bild anzuwenden.
PerPixelAlphaForm.cs
Code-Snippet<code class="language-csharp">public partial class PerPixelAlphaForm : Form { // ... constructor and other methods ... public void SelectBitmap(Bitmap bitmap) { // ... implementation to apply the bitmap ... } }</code>
SplashScreen.cs
(Beispielverwendung)<code class="language-csharp">public partial class Form4 : CSWinFormLayeredWindow.PerPixelAlphaForm { // ... constructor and other methods ... }</code>
Wichtige Überlegung:
Ein früherer Ansatz bestand darin, die doppelte Pufferung zu deaktivieren und OnPaintBackground
zu überschreiben, um das Bild direkt zu zeichnen und die Basismethode zu vermeiden. Allerdings hatte diese Methode einen erheblichen Nachteil: Während sie statisch war, funktionierte die Transparenz einwandfrei. Das Verschieben des Formulars oder das Ändern des zugrunde liegenden Fensters führte jedoch zu visuellen Artefakten und zu Fehlern bei der korrekten Aktualisierung. Die hier vorgestellte mehrschichtige Fenstermethode überwindet diese Einschränkung.
Das obige ist der detaillierte Inhalt vonWie kann ich einen transparenten Hintergrund mit glatten Kanten für ein Windows Form erzielen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!