Использование CProgressCtrl :: SetRange32 для увеличения диапазона - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть ситуация, когда я начинаю с начального диапазона, а затем хочу расширить диапазон.

Но если я позвоню SetRange32 с увеличенным размером, индикатор выполнения сбрасывается до 0, а затем у меня естьчтобы установить позицию снова.

Я не хочу, чтобы она сбрасывалась на 0. Во всяком случае, я хочу, чтобы она динамически перенастраивалась в зависимости от нового диапазона и сохраняла существующую позицию.

Возможно ли это?

Вызов SetRange, а затем SetPos, чтобы вернуться на правильный путь, является визуально уродливым решением.

1 Ответ

0 голосов
/ 17 декабря 2018

Я бы установил очень большой фиксированный размер с помощью 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 и обработать проценты соответственно.Не нужно менять диапазон вообще.

...