0

我正在尝试使用我找到的 DrawThemeTextEx 类在 .NET StatusStrip 中绘制航空风格的发光文本。这是我当前用作 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 上绘制的任何想法

编辑:是否有可能以某种方式将其包装在继承 ToolStripStatusLabel 的类中?我试过但没有走得太远。

4

1 回答 1

0

好吧,我不知道 StatusStrip,但您可以使用继承 System.Windows.Forms.StatusBar 或 System.Windows.Forms.Control 的类并覆盖 OnPaint 事件来绘制发光文本。这是一个例子:

公共类 ctlStatusBar : 控制 { 受保护的覆盖无效 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);
    }

}

于 2010-10-01T16:57:07.243 回答