Индикатор прогресса WinAPI: остановить анимацию?

Можно ли остановить / подавить "пульсирующую" анимацию индикатора выполнения? (Это было введено с перспективными темами IIRC)

У нас есть процесс, который может быть приостановлен пользователем (для проверки аппаратных или промежуточных результатов). В то время как есть обычная обратная связь "нажата кнопка паузы" для передачи состояния, анимация индикатора выполнения делает вид, что процесс все еще выполняется.

(Самый простой выход - скрыть индикатор выполнения - был бы неоптимальным, поскольку даже в состоянии паузы прогресс несколько уместен.)

2 ответа

Решение

Поскольку вы используете индикатор выполнения, представленный в версии Vista для библиотеки общих элементов управления, вы можете добиться даже большего, чем просто отключить анимацию.

Индикатор выполнения имеет три состояния:

  • Нормальный Нормальные индикаторы выполнения зеленого цвета
  • Приостановлена Приостановленные индикаторы выполнения желтые
  • ошибка Индикаторы ошибок красного цвета

Вы переключаетесь между состояниями, отправляя окно управления индикатором выполнения PBM_SETSTATE сообщениеwParam параметр должен быть либо PBST_NORMAL, PBST_PAUSED, или же PBST_ERROR, lParam параметр должен быть 0.

Пульсирующая анимация подавляется как для состояния паузы, так и для состояния ошибки.

Чтобы получить текущее состояние индикатора выполнения, отправьте PBM_GETSTATE сообщение

Это не очень понятно из вопроса, но похоже, что вы отображаете индикатор выполнения в режиме выделения. Режим "Я не умер, не знаю, сколько времени это займет, но я работаю над этим". Включается включением флага стиля PBS_MARQUEE.

Вы можете контролировать анимацию с помощью сообщения PBM_SETMARQUEE. Позволяет полностью его отключить или значительно увеличить время анимации, чтобы он начал просто сканировать. Несколько уместно, возможно, для "приостановленного" режима. По умолчанию 30 мсек, при 1000 мсек он будет выглядеть довольно медленно. Полностью заморозить это не вариант, но никто не будет смотреть на это в течение INT_MAX мс.

Другие вопросы по тегам