c++ - 使用 PBM_SETPOS 设置位置时 ProgressBar 滞后

标签 c++ windows winapi user-interface mfc

<分区>

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

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

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

有什么方法可以消除这种滞后吗?

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

关于c++ - 使用 PBM_SETPOS 设置位置时 ProgressBar 滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22469876/

相关文章:

c++ - libc++ vs libstdc++ std::is_move_assignable:哪个最正确?

c++ - 红黑树实现

python - 属性错误 : 'module' object has no attribute 'F_GETFD' - Windows 7

c++ - 如何在不使用文件句柄的情况下获取文件索引?

python - EnumDisplayDevices 提供两个显示器,即使我有一个

C++ Boost 多精度 cpp_int

c++ - Linux,在fork()中与另一个程序共享一个缓冲区

python - Python UTF-16 输出和 Windows 行结尾有错误吗?

windows - ffmpeg的python调用错过了目标文件参数

c++ - Windows 8 : How to read the user documents folder path programmatically (using c )?