用PBM_SETPOS设置位置时ProgressBar滞后

我有一个简单的C ++ / MFC对话框,它有一个进度条控件。 我使用PBM_SETPOS消息或MFC设置其位置:

//CProgressCtrl myCtrl; myCtrl.SetPos(position); 

它工作正常,除了当我需要这个位置快速发展,似乎落后。

有没有办法消除这个滞后?

PS。 我试了我的应用程序在旧版本的Windows(与经典的视觉风格),这种滞后不存在。

当启用视觉样式以向用户提供更平滑的动画体验时,滞后是由设计决定的。 这是一个小的记录,但众所周知的问题。 你不能消除滞后,但你可以解决它。 滞后只发生在增加头寸时,而不是减少头寸。 调用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); }