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) 窗口的消息。可以有客戶區和非客戶區的區分。注意這個函數不是一勞永逸的,需要多次調用。
一個簡單的應用: