2013-12-19 97 views
4

我有我自己的自定义彩色标题栏的窗口。我也在这个栏上画了一个位图,我想知道当有人用鼠标光标悬停在它上面时。我已经处理了WM_NCMOUSEMOVE消息,但是这似乎只是通过边界触发的,而不是我的标题区域本身。如何在C++ Win32中捕获鼠标移动过标题栏?

如何检测,当鼠标悬停在标题栏的某个区域?

这是用Visual C++ 2010

更新:

我已经摸索出了问题的程度。我(特意)没有在窗口上WS_CAPTION样式集,而是我处理WM_NCCALCSIZE并手动调整非客户区的大小 - 在这种情况下,移下来了20个像素。这意味着,我“逼”作为非客户区的面积没有得到WM_NCMOUSEMOVE消息,但它也没有得到WM_MOUSEMOVE的消息无论是。一种方法是强制WM_CAPTION风格,摆脱我的自定义代码WM_NCCALCSIZE,但这并不理想。有没有办法绕过它?

UPDATE2:

它与WM_NCHITTEST的消息同样的问题。除非我有我不想要的WS_CAPTION样式集,否则该区域不会触发这些区域。此外,它不知何故影响客户区域,因为它不再获得WM_LBUTTONDOWN消息。

+0

你确定你的层次没有窗口捕获那些WM_NCMOUSEMOVE消息?你有没有在窗口上试过Spy ++(从Visual Studio Tools)? – Liviu

+0

是的,我使用我自己的Window Proc来处理窗口的所有消息,除非我在边界上盘旋,否则它不会得到任何消息。 – Jon49

+8

您应该处理WM_NCHITTEST消息并使其返回HTCAPTION在适当的时候 – manuell

回答

0

我不太肯定的你的意思,但我认为你的意思是你要检查标题栏的某个片段被鼠标滑过。如果是这样,那么也许尝试跟踪窗口的大小和位置,然后检查相对于窗口位置和大小,是否会将该部分的条横扫(以像素为单位)。这是我能想到的唯一方法,它不使用特定于操作系统的功能,我尽量避免使用这些功能。