Heim >Backend-Entwicklung >C++ >Wie erstelle ich ein durchscheinendes kreisförmiges Steuerelement mit Text, der andere Steuerelemente nicht überlappt?

Wie erstelle ich ein durchscheinendes kreisförmiges Steuerelement mit Text, der andere Steuerelemente nicht überlappt?

Susan Sarandon
Susan SarandonOriginal
2025-01-22 15:56:09377Durchsuche

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

Transluzente Kreissteuerung mit Text

Frage

In einem Projekt muss ich ein Kreissteuerelement hinzufügen und Text in der Mitte anzeigen.

Mein Problem ist, dass der Kreis zu klein ist und wenn ich seine Größe ändere, überlappt er die anderen Steuerelemente. Ich möchte, dass der Kreis die gleiche Breite wie das Quadrat hat.

Oder wie macht man den Hintergrund des Steuerelements transparent?

Lösung

Dies ist ein von Control abgeleitetes benutzerdefiniertes Steuerelement, das durchscheinend gemacht werden kann.

Die Schnittstelle ist ein farbiger Kreis, der mehrere Zahlen enthalten kann.

Dieses Steuerelement stellt die folgenden benutzerdefinierten Eigenschaften bereit:

Deckkraft : Der Deckkraftgrad des Kontrollhintergrunds [0, 255]
InnerPadding (innere Polsterung) : Der Abstand zwischen dem inneren Rechteck, das die Kreisgrenze definiert, und der Kontrollgrenze.
FontPadding (Schriftauffüllung) : Der Abstand zwischen dem Text und dem inneren Rechteck.

Erzielen Sie Transparenz, indem Sie CreateParams überschreiben und dann ExStyle |= WS_EX_TRANSPARENT; festlegen.

Die

Control.SetStyle()-Methode wird verwendet, um das Steuerverhalten zu ändern. Fügen Sie die folgenden ControlStyles hinzu:

ControlStyles.Opaque: Verhindert, dass der Hintergrund des Steuerelements gezeichnet wird, sodass er nicht vom System verwaltet wird. In Verbindung mit CreateParams wird das Steuerelement durch Festlegen des erweiterten Stils des Steuerelements auf WS_EX_TRANSPARENT vollständig transparent.
ControlStyles.SupportsTransparentBackColor: Das Steuerelement akzeptiert einen Alphawert für seine Hintergrundfarbe. Wenn Sie nicht auch ControlStyles.UserPaint festlegen, wird es nicht zur Simulation von Transparenz verwendet. Wir werden es selbst mit anderen Methoden tun.

Um zu sehen, wie es funktioniert, erstellen Sie eine neue Klassendatei, ersetzen Sie den gesamten Code darin durch diesen Code, behalten Sie den Namespace bei und erstellen Sie das Projekt/die Lösung.

Neue benutzerdefinierte Steuerelemente werden in der Toolbox angezeigt. Ziehen Sie es per Drag & Drop auf das Formular. Ändern Sie die benutzerdefinierten Eigenschaften nach Bedarf.

Visuelle Darstellung der Steuerung:

Hinweis und Haftungsausschluss

  • Dies ist ein Prototyp-Steuerelement und es fehlt ein benutzerdefinierter Designer (kann hier nicht gepostet werden, zu viel Code, auch an das Framework gebunden).
  • Wie hier beschrieben, kann es andere Steuerelemente in einem Formular oder einem anderen Container vollständig überlappen. Einige Überschneidungen werden in dieser vereinfachten Implementierung nicht behandelt.
  • Die Schriftart ist in der Segoe-Benutzeroberfläche fest codiert, da diese Schriftart über eine Grundlinie verfügt, die die Platzierung von Text in der Mitte des kreisförmigen Bereichs vereinfacht.
  • Andere Schriftarten haben andere Grundlinien und erfordern eine komplexere Verarbeitung.

Das obige ist der detaillierte Inhalt vonWie erstelle ich ein durchscheinendes kreisförmiges Steuerelement mit Text, der andere Steuerelemente nicht überlappt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn