2010-09-03 3 views
0

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

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

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

ответ

0

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

общественного класса ctlStatusBar: Управление { защищен переопределения недействительным OnHandleCreated (EventArgs е) { SetStyle (ControlStyles.DoubleBuffer | ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.ResizeRedraw, правда); 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); 
    } 

}