2010-02-28 2 views
1

Мы хотим создать настольную версию для Windows нашего weather widgetМожно ли узнать, полностью ли виджет Windows в других окнах?

В виджетах есть две особенности.

  1. Он потребляет много процессорного времени пока активен - он отображает анимированные изображения (вспышка без ускорения GPU, к сожалению).
  2. Обновляет погоду от нашего сервера (частые запросы серверов от всех пользователей виджетов).

Когда пользователь не смотрит на виджет, нет необходимости в анимации и погодной нагрузке.

Итак, у меня есть идея поместить мой виджет в сон, когда он не виден, и не используется.

Можно ли определить, используется ли виджет или нет. Говоря точно, мне нужно знать, покрывается ли виджет другими окнами?

Я в основном заинтересован в Vista/7 гаджетов двигателе, однако я также хотел бы знать, если эта проблема будет решена в этих виджетах двигателей

  • Yahoo виджеты
  • настольного
  • Google

Надежда найти здесь гуру виджета рабочего стола.

Паша

ответ

1

Если вы InvalidateRect и не получить последующее WM_PAINT сообщения, чем ваше окно скрыто. Вы можете позвонить UpdateWindow после InvalidateRect, чтобы сообщение WM_PAINT произошло (или не произошло) сразу.

Так что вы могли бы сделать что-то вроде этого

  1. данных запроса сервера (и отменить таймер запроса, если таковые имеются)
  2. при поступлении данных InvalidateRect
  3. когда WM_PAINT приходит сообщение, сделать данные и установить таймер для следующего запроса
  4. когда таймер достигает, Гото 1

когда вы перестанете получать WM_PAINT, вы перестаете переустанавливать свой таймер, и вы тем самым прекратите запрашивать обновления с сервера. Когда появляется сообщение WM_PAINT (потому что вы больше не закрыты). Вы снова начнете запрашивать данные.

+0

Не работает с включенным Aero, окна никогда не перекрываются, поскольку они отображаются в буфере памяти вне экрана. –

Смежные вопросы