Mfc 使用CProgressCtrl::SetRange32增加范围

Mfc 使用CProgressCtrl::SetRange32增加范围,mfc,progress-bar,Mfc,Progress Bar,我有一种情况,我从一个初始范围开始,然后想要扩展范围 但是,如果我使用增大的大小调用SetRange32,进度条将重置为0,然后我必须再次设置位置 我不希望它重置为0。如果有的话,我希望它根据新的范围动态地重新调整,并保留现有的位置 这可能吗 调用SetRange,然后调用SetPos,以回到正轨,这在视觉上是一个丑陋的解决方案。我会使用CProgressCtrl::SetRange32设置一个非常大的固定大小,然后使用CProgressCtrl::SetPos处理虚拟大小和虚拟位置 这就是想法

我有一种情况,我从一个初始范围开始,然后想要扩展范围

但是,如果我使用增大的大小调用
SetRange32
,进度条将重置为0,然后我必须再次设置位置

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

这可能吗


调用SetRange,然后调用SetPos,以回到正轨,这在视觉上是一个丑陋的解决方案。

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

这就是想法:

你想要:

  • SetRange32(100)
  • 设置位置(50)
    //位置50%(绝对位置50)
  • SetRange32(200)
    //位置应降至25%(绝对位置仍为50) //(我想这就是你想要的)
  • 设置位置(60)
    //位置30%(绝对位置60)
它可以工作,但很难看

改为这样做:

  • SetRange32(大范围)
  • 设置位置(大范围*(50/100))
    位置50%(绝对位置50)
  • 现在我们需要另一个范围
    NEWRANGE
    no
    SetRange32
    needed
  • 设置位置((大范围/新范围)*(50/100))
  • SetPosition((大范围/新范围)*(60/100))
当然,您需要注意整数除法或使用浮点

更新(来自@ajtruckle)
或者,只需将进度条的默认范围保留为
0-100
,然后计算出相应的百分比。根本不需要更改范围。

“但是如果我调用SetRange32并增大大小,进度条将重置为0”--我无法复制。我在
OnInitDialog()中创建了一个名为
SetRange32(01000)
SetPos(500)
CProgressBarCtrl
。当我稍后调用
SetRange32(02000)
时,位置不会重置为0。它保持在500(视觉上是总进度条长度的1/4)。@zett42奇怪的是,它对你有效,而对我无效。你能用一个复制工具复制吗?我很确定
SetRange32()
SetPos()
不会相互影响,只要您不设置范围,使当前位置超出范围。@zett42我将离开它。根据提供给我的答案,我有了一个简单的工作方法,并且更易于管理逻辑。:)@zett42可能是我有一个bug导致它将位置设置为意外值。但是使用百分比来定位反而简化了事情。所以我很高兴。谢谢。看了你的答案后,很明显我实际上不需要使用“范围”,只需使用表示百分比(0到100)的进度条即可。现在一切都好了