Maison >développement back-end >C++ >Comment créer une superposition semi-transparente sur un formulaire Windows en utilisant C# ?
Cet article a pour objectif de fournir une solution pour superposer une image semi-transparente sur un Windows Form contenant d'autres contrôles, garantissant que les contrôles restent visibles mais inaccessibles.
Pour obtenir cet effet, nous utiliserons un autre formulaire et le placerons au-dessus du formulaire existant. La propriété Opacity
du nouveau formulaire contrôle le niveau de transparence. Voici une classe personnalisée qui peut être ajoutée à votre projet :
<code class="language-csharp">using System; using System.Drawing; using System.Windows.Forms; using System.Runtime.InteropServices; public class Plexiglass : Form { public Plexiglass(Form tocover) { // 自定义叠加窗体的外观和行为 this.BackColor = Color.DarkGray; this.Opacity = 0.30; this.FormBorderStyle = FormBorderStyle.None; this.ControlBox = false; this.ShowInTaskbar = false; this.StartPosition = FormStartPosition.Manual; this.AutoScaleMode = AutoScaleMode.None; this.Location = tocover.PointToScreen(Point.Empty); this.ClientSize = tocover.ClientSize; // 将叠加层与目标窗体关联,以跟踪其移动和大小调整事件 tocover.LocationChanged += Cover_LocationChanged; tocover.ClientSizeChanged += Cover_ClientSizeChanged; this.Show(tocover); tocover.Focus(); // 禁用Aero过渡效果,以获得更流畅的效果 if (Environment.OSVersion.Version.Major >= 6) { int value = 1; DwmSetWindowAttribute(tocover.Handle, DWMWA_TRANSITIONS_FORCEDISABLED, ref value, 4); } } // 事件处理程序,用于更新叠加层的位置和大小 private void Cover_LocationChanged(object sender, EventArgs e) { this.Location = this.Owner.PointToScreen(Point.Empty); } private void Cover_ClientSizeChanged(object sender, EventArgs e) { this.ClientSize = this.Owner.ClientSize; } // 调整窗体行为,以确保目标窗体保持焦点 protected override void OnActivated(EventArgs e) { this.BeginInvoke(new Action(() => this.Owner.Activate())); } protected override void OnFormClosing(FormClosingEventArgs e) { this.Owner.LocationChanged -= Cover_LocationChanged; this.Owner.ClientSizeChanged -= Cover_ClientSizeChanged; if (!this.Owner.IsDisposed && Environment.OSVersion.Version.Major >= 6) { int value = 1; DwmSetWindowAttribute(this.Owner.Handle, DWMWA_TRANSITIONS_FORCEDISABLED, ref value, 4); } base.OnFormClosing(e); } // DWM API调用的常量 private const int DWMWA_TRANSITIONS_FORCEDISABLED = 3; [DllImport("dwmapi.dll")] private static extern int DwmSetWindowAttribute(IntPtr hWnd, int attr, ref int value, int attrLen); }</code>
Pour superposer une image, créez une instance de la classe Plexiglass
et passez le formulaire cible en paramètre lorsque le formulaire est affiché. Cela crée une superposition semi-transparente qui couvre l'intégralité du formulaire cible, vous permettant de voir les contrôles existants mais empêchant toute interaction avec eux.
Pour supprimer la superposition, appelez simplement la méthode Plexiglass
de l'instance de formulaire. Close()
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!