使用PBM_SETPOS设置位置时,ProgressBar滞后

时间:2014-03-18 03:36:27

标签: c++ windows winapi user-interface mfc

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

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

它工作正常,除非我需要这个位置快速增长,它似乎落后了。

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

PS。我在旧版本的Windows上尝试了我的应用程序(具有经典的视觉样式),并且在那里不存在这种滞后。

1 个答案:

答案 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);
}