【问题标题】:Is it possible to know whether Windows widget totally covered by other windows?是否有可能知道 Windows 小部件是否完全被其他窗口覆盖?
【发布时间】:2010-02-28 10:52:38
【问题描述】:

我们想要创建一个 Windows 桌面版本的 weather widget

这个小部件有 2 个特别之处。

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

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

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

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

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

  • 雅虎小部件
  • Google 桌面

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

帕夏

【问题讨论】:

    标签: widget windows-desktop-gadgets


    【解决方案1】:

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

    所以你可以做这样的事情

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

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

    【讨论】:

    • 在启用 Aero 的情况下不起作用,窗口永远不会重叠,因为它们是在屏幕外的内存缓冲区中呈现的。
    猜你喜欢
    • 1970-01-01
    • 2021-11-01
    • 2023-03-19
    • 2012-09-23
    • 2023-02-13
    • 2018-12-06
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多