0

私が見つけた DrawThemeTextEx クラスを使用して、.NET StatusStrip に aero スタイルの光るテキストを描画しようとしています。これは、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イベントをオーバーライドして光るテキストを描画することができます。次に例を示します。

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

}

于 2010-10-01T16:57:07.243 に答える