Windows經典樣式 (Classic Style)下不能自動接收WM_NCMOUSELEAVE的問題

Windows 經典樣式 (Classic Style) 下不能自動接收

WM_NCMOUSELEAVE 的問題

作者: cywater2000

日期: 2009-8-1

來自: http://blog.csdn.net/cywater2000

 

前段時間同事解決了一個項目遺留問題,在其他機器上測試沒什麼問題,但在我的機器上總是有問題。後來仔細研究發現,他使用了 WM_NCMOUSELEAVE 消息,此消息在窗口爲 XP 樣式 (Windows XP Style) 下是自動接收的。而我喜歡的簡約風格窗口“ Windows 經典樣式”就出問題了:接收不到,或者消息沒有轉發。

Google 了一下,在 CSDN / MSDN 也查了一下,發現必須要使用 TrackMouseEvent 這個函數才能獲得 WM_NCMOUSELEAVE 消息。 Ft! 從來沒想過窗口風格不一樣會導致代碼執行不一樣

 

簡單說明一下:

http://msdn.microsoft.com/en-us/library/ms645626(VS.85).aspx

WM_NCMOUSELEAVE 消息當光標離開窗口非客戶區時觸發, MSDN 上說之前要調用 TrackMouseEvent 纔可以。實際上 XP 風格下不需要顯示調用。

 

http://msdn.microsoft.com/en-us/library/ms646265(VS.85).aspx

TrackMouseEvent 函數是用來傳遞當鼠標指針離開 (LEAVE) 窗口或者在指定時間懸停 (HOVER) 窗口的消息。可以有客戶區和非客戶區的區分。注意這個函數不是一勞永逸的,需要多次調用。

 

一個簡單的應用:

 

 

發佈了48 篇原創文章 · 獲贊 7 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章