C#中的平滑文本滚动

use*_*003 2 c# text scroll

我希望在我的c#窗体上能够顺畅地滚动文本.

我试图定义带有文本的标签,逐个像素地移动,但它不是平滑的,因为它就像在flash中创建的动画一样.

我怎样才能设法得到如此流畅的动画?

先感谢您!

Ala*_*lan 6

我试过这个,我有一些好消息和一些坏消息.

好消息是它有可能.我现在正在测试代码,即使使用GDI +,我也可以实现绝对柔滑的文本滚动.

困难的部分是你必须确保/实施它有很多事情:

  1. 在渲染表面(例如表单)上将DoubleBuffered设置为true.
  2. 你必须自己绘制文本,Label类不会这样做(参见下一点的原因).
  3. 您需要在绘图(定位)代码中使用浮点分辨率,这意味着您必须在DrawString()调用中使用TextRenderingHint.AntiAlias并使用更大的字体大小(> 10-12 pt)才能使其看起来更好.
  4. 您需要一个非常高分辨率的计时器组件.我在winmm.dll中使用基于Win32多媒体定时器的组件,允许定时器事件率高达1000 Hz,几乎绝对准确(标准偏差低于0.1 ms).Google for MultimediaTimer组件.(顺便说一句,我知道它不再是MS推荐的解决方案,但即使在Windows 7中它也能完美运行.)
  5. 此外,Windows多媒体计时器具有毫秒级的分辨率,无法为您提供完美的60 Hz刷新(1000/60不是整数),因此您需要实现某种浮点显示刷新计数机制以获得尽可能接近显示刷新率尽可能.有点像

    float tickCount = 0.0f;
    float tickDelta = 1000.0f / 60.0f;
    
    
    void mmTimer_Tick(object sender, EventArgs e)
    {
        tickCount++;
        if (tickCount >= tickDelta)
        {
            tickCount -= tickDelta;
            // scroll your text here 
            Invalidate();
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)

    会做.

  6. 最后,偶尔会发生一些轻微的撕裂.这几乎是不可避免的,因为您无法访问垂直同步视频寄存器.尝试消除撕裂的时间.

老实说,我希望这会有所帮助.如果您在实施它时遇到任何问题,请告诉我.