views:

85

answers:

1

Hi, I'm trying to draw aero-styled glowing text in a .NET StatusStrip with a DrawThemeTextEx class I found. This is my current code which I use as a renderer for the StatusStrip:

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

The problem however, is that the glowing text seems to be drawn below the StatusStrip. Any idea on how to get it to draw on the StatusStrip?

EDIT: Is it possible to somehow wrap this in a class which inherits ToolStripStatusLabel? I tried but didn't get too far.

A: 

Well I don't know about a StatusStrip but you can use a class that inherits System.Windows.Forms.StatusBar or System.Windows.Forms.Control and override the OnPaint event to draw glowing text. here's an example:

public class ctlStatusBar : Control { 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);
    }

}

majek