2010-02-28 81 views
1

我們想要創建一個Windows桌面版本的我們的weather widget是否有可能知道Windows窗口小部件是否完全被其他窗口覆蓋?

有2個關於小部件的特殊事情。

  1. 它消耗了大量的處理器時間 而活性 - 它顯示一個 動畫(閃光燈無GPU加速,不幸的是)。
  2. 它從我們的 服務器更新天氣(來自所有小部件用戶的頻繁服務器請求)。

當用戶不看小部件時,不需要動畫和天氣加載。

所以我有一個想法讓我的小部件睡覺,當它不可見和hense沒有使用。

是否可以檢測小部件是否被使用。 精確地說,我需要知道小部件是否被其他窗口覆蓋?

我在Vista/7,小工具引擎最感興趣,但是我也想知道這個問題是在這些widget引擎解決

  • Yahoo工具
  • 谷歌桌面

希望在這裏找到一些桌面小工具大師。

帕夏

回答

1

如果InvalidateRect並沒有得到後續WM_PAINT消息,比你的窗口被隱藏。您可以在InvalidateRect之後致電UpdateWindow強制WM_PAINT消息立即發生(或不發生)。

所以你可以做這樣的事情

  1. 請求服務器的數據(如果有任何取消請求定時器)
  2. 當數據到達InvalidateRect當WM_PAINT消息到達時,提取數據,並設置一個計時器
  3. 對於下一個請求
  4. 當定時器到達時,轉到1

當你停止獲取WM_PAINT消息,您停止重新設置您的計時器,並因此停止從服務器請求更新。當WM_PAINT消息發生時(因爲你不再被覆蓋)。您開始再次請求數據。

+0

啓用Aero時不起作用,Windows從不重疊,因爲它們呈現在屏幕外的緩衝區中。 – 2010-02-28 12:50:45

相關問題