[英]Smooth text scrolling in C#
我想在C#Windows窗体上平滑滚动的文本。
我试图定义带有文本的标签,像素逐像素移动,但是它不平滑,因为它就像在Flash中创建的动画一样。
我如何才能获得如此流畅的动画?
先感谢您!
我已经尝试过这样做,并且我有一些好消息和一些坏消息。
好消息是有可能。 我现在正在测试代码,即使使用GDI +,也可以实现绝对柔滑的文本滚动。
困难的部分是必须确保/实施很多事情才能拥有它:
此外,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(); } }
会做。
最后,偶尔会发生一些轻微的撕裂。 这几乎是不可避免的,因为您无权访问垂直同步视频寄存器。 尝试定时以消除撕裂。
老实说,我希望这会有所帮助。 让我知道您在实施它时是否遇到任何问题。
我假设您使用双缓冲,因为如果没有它,您的文本将闪烁并且根本看起来不会很好。
GDI可能存在问题,那就是您的移动速度未与监视器刷新率同步。
例如,如果您有60Hz的LCD监视器,则应该每1000/60毫秒更新一次文本位置,但是如果使用计时器,则会时不时地出现混乱。
如果您在表单上覆盖了只读属性CreateParams,并将WX_COMPOSITE(0x2000000,我认为是Composite)添加到参数中。 这仅适用于XP和更高版本,但在DoubleBuffer不起作用时会停止闪烁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.