Можно ли узнать, полностью ли покрыт виджет Windows другими окнами? - PullRequest
1 голос
/ 28 февраля 2010

Мы хотим создать настольную версию Windows * нашего виджета погоды

В виджете есть две особые вещи.

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

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

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

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

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

  • виджеты Yahoo
  • рабочий стол Google

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

Pasha

1 Ответ

1 голос
/ 28 февраля 2010

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

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

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

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

...