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

c00*_*0fd 5 c++ windows user-interface winapi mfc

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

//CProgressCtrl myCtrl;
myCtrl.SetPos(position);
Run Code Online (Sandbox Code Playgroud)

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

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

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

Rem*_*eau 12

当启用视觉样式以向用户提供更流畅的动画体验时,滞后是设计的.这是一个有点记载但众所周知的问题.你无法消除滞后,但你可以解决它.滞后仅在增加位置时发生,而在降低位置时不发生.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);
}
Run Code Online (Sandbox Code Playgroud)