使用PBM_SETPOS设置位置时进度条滞后

ProgressBar lag when setting position with PBM_SETPOS

本文关键字:滞后 位置 PBM SETPOS 设置 使用      更新时间:2023-10-16

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

设置其位置。
//CProgressCtrl myCtrl;
myCtrl.SetPos(position);

它工作得很好,除了当我需要这个职位快速增长时,它似乎落后了。

有办法消除这个延迟吗?

p。我在旧版本的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);
}