Maison > développement back-end > C++ > Comment créer un contrôle circulaire translucide avec du texte qui ne chevauche pas les autres contrôles ?

Comment créer un contrôle circulaire translucide avec du texte qui ne chevauche pas les autres contrôles ?

Susan Sarandon
Libérer: 2025-01-22 15:56:09
original
339 Les gens l'ont consulté

How to Create a Translucent Circular Control with Text That Doesn't Overlap Other Controls?

Contrôle cercle translucide avec texte

Question

Dans un projet, je dois ajouter un contrôle cercle et afficher du texte au milieu.

Mon problème est que le cercle est trop petit et lorsque je le redimensionne, il chevauche les autres contrôles. Je veux que le cercle ait la même largeur que le carré.

Ou, comment rendre transparent l'arrière-plan du champ ?

Solution

Il s'agit d'un contrôle personnalisé dérivé de Control qui peut être rendu translucide.

L'interface est un cercle coloré pouvant contenir plusieurs chiffres.

Ce contrôle expose les propriétés personnalisées suivantes :

Opacité  : Le niveau d'opacité de l'arrière-plan du contrôle [0, 255]
InnerPadding (rembourrage intérieur)  : La distance entre le rectangle intérieur qui définit la limite du cercle et la limite de contrôle.
FontPadding (font padding)  : La distance entre le texte et le rectangle intérieur.

Obtenez la transparence en remplaçant CreateParams, puis en définissant ExStyle |= WS_EX_TRANSPARENT;

La méthode Control.SetStyle() est utilisée pour modifier le comportement du contrôle, ajoutez les ControlStyles suivants :

ControlStyles.Opaque : Empêche l'arrière-plan du contrôle d'être dessiné afin qu'il ne soit pas géré par le système. Utilisé conjointement avec CreateParams, la définition du style étendu du contrôle sur WS_EX_TRANSPARENT rend le contrôle entièrement transparent.
ControlStyles.SupportsTransparentBackColor : Le contrôle accepte une valeur alpha pour sa couleur d'arrière-plan. Si vous ne définissez pas également ControlStyles.UserPaint, il ne sera pas utilisé pour simuler la transparence. Nous le ferons nous-mêmes par d'autres méthodes.

Pour voir comment cela fonctionne, créez un nouveau fichier de classe, remplacez tout le code qu'il contient par ce code, conservez l'espace de noms et construisez le projet/la solution.

De nouveaux contrôles personnalisés apparaîtront dans la boîte à outils. Faites-le glisser et déposez-le sur le formulaire. Modifiez ses propriétés personnalisées selon vos besoins.

Représentation visuelle du champ :

Remarque et clause de non-responsabilité

  • Il s'agit d'un prototype de contrôle et il lui manque un concepteur personnalisé (impossible de publier ici, trop de code, également lié au framework).
  • Comme décrit ici, il peut complètement chevaucher d'autres contrôles dans un formulaire ou un autre conteneur. Certains chevauchements ne sont pas gérés dans cette implémentation simplifiée.
  • La police est codée en dur dans Segoe UI car cette police a une ligne de base qui simplifie le placement du texte au milieu de la zone circulaire.
  • D'autres polices ont des lignes de base différentes et nécessitent un traitement plus complexe.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal