1

我们想创建一个 Windows 桌面版本的天气小部件

小部件有 2 个特别之处。

  1. 它在活动时会消耗大量处理器时间 - 它会显示动画图片(不幸的是,Flash 没有 GPU 加速)。
  2. 它从我们的服务器更新天气(来自所有小部件用户的频繁服务器请求)。

当用户不看小部件时,不需要动画和天气加载。

所以我有一个想法,让我的小部件在它不可见且未使用时进入睡眠状态。

是否可以检测小部件是否被使用。准确地说我需要知道小部件是否被其他窗口覆盖?

我对 Vista/7 小工具引擎最感兴趣,但是我也想知道这些小部件引擎是否解决了这个问题

  • 雅虎小部件
  • 谷歌桌面

希望在这里找到一些桌面小部件大师。

帕夏

4

1 回答 1

1

如果您InvalidateRect并且没有收到后续WM_PAINT消息,那么您的窗口将被隐藏。您可以UpdateWindow在之后调用InvalidateRect以强制WM_PAINT消息立即发生(或不发生)。

所以你可以做这样的事情

  1. 请求服务器数据(如果有则取消请求计时器)
  2. 数据到达时InvalidateRect
  3. 当 WM_PAINT 消息到达时,绘制数据并为下一个请求设置计时器
  4. 当计时器到达时,转到 1

当您停止接收 WM_PAINT 消息时,您将停止重新设置计时器,因此您停止从服务器请求更新。当 WM_PAINT 消息发生时(因为您不再被覆盖)。您再次开始请求数据。

于 2010-02-28T11:11:32.647 回答