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

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

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

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


person peterchen    schedule 02.07.2013    source источник


Ответы (2)


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

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

  • Обычный Обычные индикаторы выполнения зеленые
  • Приостановлено Приостановленные индикаторы выполнения желтые
  • Ошибка Индикаторы ошибок красные

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

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

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

person Cody Gray    schedule 02.07.2013

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

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

person Hans Passant    schedule 02.07.2013
comment
Я обновил вопрос - я имел в виду пульсирующую анимацию, которая у вас есть, даже если полоса prgoress застряла. Спасибо! - person peterchen; 03.07.2013