Windows 经典样式 (Classic Style) 下不能自动接收
WM_NCMOUSELEAVE 的问题
作者: cywater2000
日期: 2009-8-1
来自: http://blog.youkuaiyun.com/cywater2000
前段时间同事解决了一个项目遗留问题,在其他机器上测试没什么问题,但在我的机器上总是有问题。后来仔细研究发现,他使用了 WM_NCMOUSELEAVE 消息,此消息在窗口为 XP 样式 (Windows XP Style) 下是自动接收的。而我喜欢的简约风格窗口“ Windows 经典样式”就出问题了:接收不到,或者消息没有转发。
Google 了一下,在 优快云 / 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) 窗口的消息。可以有客户区和非客户区的区分。注意这个函数不是一劳永逸的,需要多次调用。
一个简单的应用: