我遇到的情况是我从一个初始范围开始,然后想要扩大范围。
但是如果我以增大的尺寸致电SetRange32
,进度条将重置为0,然后我必须再次设置位置。
我不希望它重置为0。如果有的话,我希望它根据新范围动态地重新调整并保留现有位置。
这可能吗?
先调用SetRange然后再调用SetPos使其返回正轨是一个视觉上很丑的解决方案。
答案 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))
当然,您需要照顾整数除法或使用浮点数。
或者,只需将进度栏保留为默认范围0 - 100
,然后相应地计算出百分比即可。完全不需要更改范围。