2011-05-18 113 views
5

我有一個透明窗口(用WS_EX_LAYERED創建),我想接收零α區域的鼠標事件。
據我所知,我可以:如何攔截透明窗口的鼠標事件?

1)使用鼠標鉤子
2)油漆的背景幾乎完全透明色(即具有1的不透明度)

然而,第一解決方案是耗時,第二個會減慢我的渲染時間,因爲我的窗口幾乎遍佈桌面,大多數像素在此時完全透明。

是否有另一種方式接收這些鼠標事件?

+0

您是否一直需要這種通用功能,或者只是在某些時候(例如,當您的窗口是活動窗口時)。如果是後者,則可以捕捉鼠標。 – 2011-05-18 23:57:52

+0

鉤子的另一個問題是,你必須非常小心你的窗口在頂部,這樣你就不會竊取其他窗口上的點擊。如果你提供了更多關於你想要實現的信息,這可能會有所幫助。 – 2011-05-18 23:58:41

+0

我會更好地解釋它, 我正在繪製PNG圖標,並試圖檢測鼠標是否徘徊這些項目。現在大多數圖標都有零個alpha區域,當我將它們懸停時,我沒有收到WM_MOUSEMOVE事件,因爲它們的容器窗口是透明的。 – Omer 2011-05-19 10:43:53

回答

1

根據MSDN:

分層窗口的命中測試基於所述形狀和 窗口透明度是 。這意味着窗口的顏色鍵區域 或者其值爲零的 將使鼠標消息通過。但是,如果 分層窗口有 WS_EX_TRANSPARENT擴展窗口 風格,分層窗口 的形狀將被忽略,並且鼠標事件 將被傳遞到其他窗口 分層窗口下方。

然而,在一個新的線程,你可以不斷地獲得鼠標的座標與GetCursorPos,如果位置是裏面的圖標是一個(不考慮,它是在裏面的圖標零阿爾法像素),你處理它。沒有比鉤子好得多的東西

+0

雅,最終我使用了鉤子,謝謝你的幫助! – Omer 2011-05-21 12:33:43

相關問題