Überschreiben Der OnPaint-Label?
Ich versuche das überschreiben der OnPaint-Methode eines Labels in meine eigene benutzerdefinierte Steuerung mit FillPath.
Hier ist mein code für das Steuerelement:
public partial class GlassLabel : Label
{
public GlassLabel()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Graphics g = this.CreateGraphics();
GraphicsPath path = new GraphicsPath();
SolidBrush br = new SolidBrush(Color.Black);
path.AddString("LLOOOOLL", new FontFamily("Microsoft Sans Serif"), (int)FontStyle.Regular, 12, new Point(55, 55), StringFormat.GenericDefault);
g.SmoothingMode = SmoothingMode.HighQuality;
g.FillPath(br, path);
}
}
Wenn ich es ausführen, wird der text des Labels ist genau das gleiche, aber Sie nicht zeichnen sich mit FillPath.
Der Grund, warum ich versuche zu überschreiben, ist das label das ich verwenden möchte es an Aero glass, die Bedürfnisse FillPath. Wenn ich könnte drehen einer Grafik(die FillPath), ein Objekt, so kann ich die Ereignisse anfügen, um, ich möchte gerne Infos zu.
Dank.
Gerade versucht:
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
e.Graphics.FillPath(br, path);
Nicht funktioniert.
- Versuchen Sie, mit dem Graphics-Objekt von der PaintEventArgs "e".
- Legen Sie eine Pause und überprüfen Sie Ihren code ausgeführt wird. Auch versuchen Sie den Aufruf von base.OnPaint nur als eine vorübergehende Prüfung.
- Es trifft die break-point, aber nichts zieht. Ich habe entfernt base.OnPaint es das label nicht zeichnen überhaupt.
- Das ist einfach nicht gut unterstützt durch traditionelle Winforms-text-Zeichnung. Beste, was zu tun ist pinvoke DrawThemeTextEx() so können Sie die DTTSOPTS.iGlowSize zu erstellen, die milchig weißen hintergrund. Richten Sie Ihre browser auf google zu finden, das trifft auf diese keywords.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht erstellen Sie ein neues Graphics-Objekt, sondern die Nutzung
e.Graphics
in derPaintEventArgs
argument.Ich bin mir nicht sicher, was Sie versuchen, zu erreichen mit der
GraphicsPath
. Wahrscheinlich könnte man nur verwendenTextRenderer
statt.UPDATE:
Wechselte ich ein Formular Aero-Glas und machte einige tests. Beide Ansätze mit
TextRenderer
und mitGraphicsPath
Arbeit, aber dieTextRenderer
nicht ausführen sehr gut, weil ClearType erzeugt Artefakte auf dem Glas.Diese API-Deklarationen erforderlich sind
In der form Konstruktor habe ich diesen code
Benutzerdefinierte
Label
müssen, haben einen schwarzen hintergrund. Schwarze Teile werden auf dem display als Glas. Es muss mindestens die Größe von etwa (125, 70) zu passen Ihren text, weil Sie mit dem zeichnen beginnen bei (55, 55). (Wurde Ihr label zu klein?) Ändern Sie dieAutoSize
zufalse
um der Lage sein, ändern Sie die Größe des Etiketts. Hier ist der code für das benutzerdefinierte labelMit ein paar Unterschiede, es ist der gleiche code wie bei Ihnen. Ein wichtiger Unterschied ist, dass der text Farbe muss anders sein als schwarz; sonst würde es erscheinen, als Glas. Ich nehme einfach die schriftart-Eigenschaften des eigentlichen label-Schrift. Auf diese Weise können Sie dessen Erscheinungsbild ändern im Eigenschaften-Fenster.
Fand ich den code für die Glas-Effekt in dieser Artikel von TheCodeKing.
Font
,ClientRectangle
, undForeColor
das aktuelle Etikett.Color.FromArgb(1,0,0)
.Control Panel\Appearance and Personalization\Personalization\Window Color and Appearance
.mit einem einzigen cs-Datei, die Sie erstellen Ihr eigenes label-Steuerelement