Maison >développement back-end >C++ >Comment éliminer les artefacts visuels lors du zoom sur un contrôle utilisateur avec des coins arrondis ?
Éliminer les artefacts visuels lors du zoom sur un UserControl avec des coins arrondis
Le zoom sur un UserControl avec des coins arrondis peut entraîner des artefacts visuels, tels que la disparition ou frontières déformées. Ce problème survient lorsque la région du contrôle, qui définit sa zone pouvant être peinte, n'est pas mise à jour correctement lors de l'opération de zoom.
Solution :
Pour résoudre ce problème, envisagez d'implémenter l'approche suivante :
Appliquer une échelle et traduire la matrice à la région du contrôle. Cela réduira efficacement les limites de la région, garantissant que lorsque les frontières sont peintes, elles tombent dans la région et sont correctement anti-aliasées.
Définissez la couleur d'arrière-plan du UserControl sur transparent. Cela permet au contenu du contrôle d'être dessiné directement sur le conteneur parent.
Implémentation du contrôle améliorée :
Voici une version améliorée du code UserControl qui intègre la solution ci-dessus :
using System.Drawing; using System.Drawing.Drawing2D; public class RoundControl : UserControl { private GraphicsPath GraphicsPathWithBorder; private float MyBaseWidth; private float m_PenSize = 2f; private Color m_BorderColor = Color.Yellow; private Color m_FillColor = Color.Green; public RoundControl() { ResizeRedraw = true; InitializeComponent(); MyBaseWidth = Width; BackColor = Color.Transparent; } // ... (other properties and methods) protected override void OnPaint(PaintEventArgs e) { e.Graphics.SmoothingMode = SmoothingMode.AntiAlias; RectangleF rect = GraphicsPathWithBorder.GetBounds(); float scaleX = 1 - ((m_PenSize + 1) / rect.Width); float scaleY = 1 - ((m_PenSize + 1) / rect.Height); using (Pen pen = new Pen(m_BorderColor, m_PenSize)) using (Brush brush = new SolidBrush(m_FillColor)) using (Matrix mx = new Matrix(scaleX, 0, 0, scaleY, pen.Width / 2, pen.Width / 2)) { e.Graphics.Transform = mx; e.Graphics.FillPath(brush, GraphicsPathWithBorder); e.Graphics.DrawPath(pen, GraphicsPathWithBorder); } base.OnPaint(e); } // ... (other methods) }
En implémentant ces modifications, vous pouvez vous assurer que les coins arrondis du UserControl restent visuellement cohérents et exempts d'artefacts pendant le zoom. opérations.
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!