我有一个简单的C ++ / MFC对话框,里面有一个进度条控件。我使用PBM_SETPOS消息或MFC的设置其位置:
//CProgressCtrl myCtrl;
myCtrl.SetPos(position);
它工作正常,除非我需要这个位置快速增长,它似乎落后了。
有没有办法消除这种滞后?
PS。我在旧版本的Windows上尝试了我的应用程序(具有经典的视觉样式),并且在那里不存在这种滞后。
答案 0 :(得分:11)
当启用视觉样式以向用户提供更流畅的动画体验时,滞后是设计的。这是一个有点记载但众所周知的问题。你无法消除滞后,但你可以解决它。滞后仅在增加位置时发生,而在降低位置时不发生。调用SetPos(position+1)
后跟SetPos(position)
,栏会立即跳转。棘手的部分结束了。如果要将位置设置为最大值,则必须首先增加最大值+1,然后设置所需位置+1,然后设置实际位置,最后恢复原始最大值。这将允许进度条填满整个栏。
int lower, upper;
myCtrl.GetRange(lower, upper);
if (position >= upper)
{
myCtrl.SetRange(lower, upper+1);
myCtrl.SetPos(upper+1);
myCtrl.SetPos(upper);
myCtrl.SetRange(lower, upper);
}
else
{
myCtrl.SetPos(position+1);
myCtrl.SetPos(position);
}