我希望在我的c#窗体上有能够顺畅滚动 的文字。
我试图定义带有文字的标签,逐个像素地移动,但它不是平滑的,因为它就像在flash中创建的动画一样。
我怎样才能设法获得如此流畅的动画?
提前谢谢你!
答案 0 :(得分:6)
我试过这个,我有一些好消息和一些坏消息。
好消息是有可能。我现在正在测试代码,即使使用GDI +,我也可以实现绝对柔滑的文本滚动。
困难的部分是,您必须确保/实施相当多的事情:
此外,Windows多媒体计时器 具有毫秒级的分辨率 不能给你完美的60赫兹 刷新(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();
}
}
会做。
最后,一些轻微的撕裂可能 偶尔发生。这是所有的了 但不可避免,因为你没有 访问垂直同步视频 寄存器。试验时间 消除撕裂。
老实说,我希望这会有所帮助。如果你在实施它时遇到任何问题,请告诉我。
答案 1 :(得分:0)
我认为你使用双缓冲,因为没有它,你的文字会闪烁,看起来不会很好。
你可能有GDI的问题,那就是你的移动速度与监视器刷新率没有同步。
例如,如果你有60Hz液晶显示器,你应该每1000/60毫秒更新一次文本位置,但是如果你使用计时器,你会偶尔遇到急动。
答案 2 :(得分:0)
如果覆盖表单上的只读属性CreateParams,并向params添加WX_COMPOSITE(0x2000000,我认为它是复合的)。这仅适用于XP及更高版本,但它会停止闪烁,而DoubleBuffer则不会。