【问题标题】:ProgressBar lag when setting position with PBM_SETPOS [duplicate]使用 PBM_SETPOS 设置位置时进度条滞后 [重复]
【发布时间】:2014-04-23 13:46:15
【问题描述】:

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

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

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

有什么办法可以消除这种延迟?

PS。我在旧版本的 Windows(具有经典视觉样式)上尝试了我的应用程序,但这种延迟不存在。

【问题讨论】:

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


    【解决方案1】:

    当启用视觉样式以向用户提供更流畅的动画体验时,延迟是设计使然。这是一个很少记录但众所周知的问题。您无法消除滞后,但可以解决它。滞后仅在增加位置时发生,但在减少位置时不会发生。拨打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);
    }
    

    【讨论】:

    • 哇哦。并且没有样式可以禁用这种视觉样式行为?
    • 谢谢。虽然我无法想象它自 Vista 以来仍未修复。 (我在 Windows 8 上运行我的测试。)
    • 另请注意,要使此技巧发挥作用,进度条必须具有PBS_SMOOTHPBS_SMOOTHREVERSE 样式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 2011-04-19
    相关资源
    最近更新 更多