2010-09-03 59 views
0

我想用我找到的DrawThemeTextEx類在.NET StatusStrip中繪製航空風格的發光文本。這是我當前的代碼,我作爲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?

編輯:是否有可能以某種方式將其包含在繼承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); 
    } 

}