使用CProgressCtrl :: SetRange32增加范围

时间:2018-12-17 14:08:12

标签: mfc progress-bar

我遇到的情况是我从一个初始范围开始,然后想要扩大范围。

但是如果我以增大的尺寸致电SetRange32,进度条将重置为0,然后我必须再次设置位置。

我不希望它重置为0。如果有的话,我希望它根据新范围动态地重新调整并保留现有位置。

这可能吗?

先调用SetRange然后再调用SetPos使其返回正轨是一个视觉上很丑的解决方案。

1 个答案:

答案 0 :(得分:2)

我会用CProgressCtrl::SetRange32设置一个非常大的固定大小,然后使用CProgressCtrl::SetPos处理一个虚拟尺寸和一个虚拟位置。

这是想法:

您要

  • SetRange32(100)
  • SetPosition(50) //排名50%(绝对排名50)
  • SetRange32(200) //位置应减少到25%(绝对位置仍为50)                  //(我想这就是您想要的)
  • SetPosition(60) //排名30%(绝对排名60)

有效但是很丑。

执行此操作:

  • SetRange32(BIGRANGE);
  • SetPosition(BIGRANGE * (50 / 100))排名50%(绝对排名50)
  • 现在我们需要另一个范围NEWRANGE不需要SetRange32
  • SetPosition((BIGRANGE / NEWRANGE) * (50 / 100))
  • SetPosition((BIGRANGE / NEWRANGE) * (60 / 100))

当然,您需要照顾整数除法或使用浮点数。

更新(来自@ajtruckle)

或者,只需将进度栏保留为默认范围0 - 100,然后相应地计算出百分比即可。完全不需要更改范围。