2010-09-03 6 views
0

J'essaye de dessiner le texte rougeoyante d'aero-style dans un .NET StatusStrip avec une classe de DrawThemeTextEx que j'ai trouvée. Ceci est mon code actuel que je l'utilise comme pour le StatusStrip renderer:Comment dessiner un texte éclatant sur StatusStrip avec DrawThemeTextEx?

Class GlassStatusRenderer 
Inherits System.Windows.Forms.ToolStripProfessionalRenderer 

Protected Overrides Sub OnRenderToolStripBackground(ByVal e As System.Windows.Forms.ToolStripRenderEventArgs) 
    e.Graphics.Clear(Color.Transparent) 
End Sub 

Protected Overrides Sub OnRenderItemText(ByVal e As System.Windows.Forms.ToolStripItemTextRenderEventArgs) 
    e.Graphics.Clear(Color.Transparent) 

    Dim glowingText As New GlassText 
    glowingText.DrawTextOnGlass(Form1.Handle, e.Text, e.TextFont, New Rectangle(e.TextRectangle.Left, e.ToolStrip.Top - 10, e.TextRectangle.Width, e.TextRectangle.Height), 6) 
End Sub 

End Class

Le problème cependant est que le texte brillant semble être tiré en dessous du StatusStrip. Une idée sur la façon de l'obtenir pour dessiner sur le StatusStrip? Est-il possible d'envelopper d'une manière ou d'une autre dans une classe qui hérite de ToolStripStatusLabel? J'ai essayé mais je ne suis pas allé trop loin.

Répondre

0

Eh bien, je ne connais pas de StatusStrip, mais vous pouvez utiliser une classe qui hérite de System.Windows.Forms.StatusBar ou System.Windows.Forms.Control et remplacer l'événement OnPaint pour dessiner un texte éclatant. voici un exemple:

public class ctlStatusBar: contrôle { protected override void OnHandleCreated (EventArgs e) { SetStyle (ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true); base.OnHandleCreated (e); }

protected override void OnPaint(PaintEventArgs e) 
    { 
     DrawStatusBar(e.Graphics); 
    } 

    private void DrawStatusBar(Graphics g) 
    { 
     if (Width < 1 || Height < 1) return; 

     IntPtr primaryHdc = g.GetHdc(); 
     IntPtr memoryHdc = Global.CreateCompatibleDC(primaryHdc); 

     DrawGlowingText(primaryHdc, memoryHdc, new Rectangle(0, 0, Width, Height), RebarRenderer, p_Text); 
    } 

}

Questions connexes