Как нарисовать светящийся текст на StatusStrip с DrawThemeTextEx? - PullRequest
0 голосов
/ 03 сентября 2010

Я пытаюсь нарисовать светящийся текст в стиле Aero в .NET StatusStrip с помощью класса DrawThemeTextEx, который я обнаружил.Это мой текущий код, который я использую в качестве средства визуализации для 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

Конечный класс

Проблема, однако, в том, что светящийся текст кажется нарисованным ниже StatusStrip.Любая идея о том, как заставить его рисовать на StatusStrip?

EDIT: Можно ли как-то обернуть это в класс, который наследует ToolStripStatusLabel?Я пытался, но не слишком далеко.

1 Ответ

0 голосов
/ 01 октября 2010

Ну, я не знаю о StatusStrip, но вы можете использовать класс, который наследует System.Windows.Forms.StatusBar или System.Windows.Forms.Control и переопределить событие OnPaint для рисования светящегося текста. Вот пример:

открытый класс ctlStatusBar: Control { защищенное переопределение void OnHandleCreated (EventArgs e) { SetStyle (ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, true); base.OnHandleCreated (е); }

    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);
    }

}

...