开发者

Stuck trying to get my c# text scroller to run smoothly

I'm doing a small project where my vc# application needs to include a text scroller / news ticker. Application will be running on 30+ screens showing off internal ad production at my workplace. I've been googling and testing for a couple of months now but has yet to find / create a good solution where the movement is smooth and not choppy.

So my question is: is it possible to create perfect smooth scroll motion in c# or do I need to go about it some other way?

The code I'm using at the moment, part of a sample I edited, is running almost smooth except it seems to lag every 100 ms or so.

Here is the code I'm using:

namespace ScrollDemo1
{
public partial class NewsTicker : Panel
{
    private Timer mScroller;
    private int mOffset; 
    private string mText;
    private Size mPixels;
    private Bitmap mBuffer;
    public NewsTicker()
    {
        mScroller = new Timer();
        mScroller.Interval = 1;
        mScroller.Enabled = false;
        mScroller.Tick += DoScroll;
    }
    [Browsable(true)]
    public override string T开发者_如何学Pythonext
    {
        get { return mText; }
        set
        {
            mText = value;
            mScroller.Enabled = mText.Length > 0;
            mPixels = TextRenderer.MeasureText(mText, this.Font);
            mOffset = this.Width;
        }
    }
    protected override void OnPaintBackground(PaintEventArgs e)
    {
    }
    private void DoScroll(object sender, EventArgs e)
    {
        mOffset -= 1;
        if (mOffset < -mPixels.Width) mOffset = this.Width;
        Invalidate();
        Update();
    }
    protected override void OnPaint(PaintEventArgs e)
    {
        if (mBuffer == null || mBuffer.Width != this.Width || mBuffer.Height != this.Height)
            mBuffer = new Bitmap(this.Width, this.Height);
        Graphics gr = Graphics.FromImage(mBuffer);
        Brush bbr = new SolidBrush(this.BackColor);
        Brush fbr = new SolidBrush(this.ForeColor);
        Bitmap bmp = global::ScrollDemo1.Properties.Resources.text_bg1;
        TextureBrush tb = new TextureBrush(bmp);
        int iLoc = (this.Height / 2) - (mPixels.Height / 2);
        //Console.WriteLine(iLoc.ToString());
        //gr.FillRectangle(bbr, new Rectangle(0, 0, this.Width, this.Height));
        gr.FillRectangle(tb, new Rectangle(0, 0, this.Width, this.Height));
        gr.DrawString(mText, this.Font, fbr, mOffset, iLoc);
        e.Graphics.DrawImage(mBuffer, 0, 0);
        bbr.Dispose();
        fbr.Dispose();
        gr.Dispose();
    }
}
}


I'd suggest you go with WPF. It has rich and easy to use support for animations and tends to be be very smooth since it is Direct3D based.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜