如何在C ++ Win32中捕获标题栏上的鼠标移动?

时间:2013-12-19 14:47:50

标签: c++ winapi visual-c++

我有自己的自定义绘制标题栏用于窗口。我还在这个栏上画了一个位图,当有人用鼠标光标悬停在它上面时我想知道。我已经处理了WM_NCMOUSEMOVE消息,但这似乎只是在边界而不是我的标题区域本身触发。

如何检测鼠标何时超过标题栏的某个区域?

这是Visual C ++ 2010。

更新

我已经解决了这个问题。我(故意)没有在窗口上设置WS_CAPTION样式,而是处理WM_NCCALCSIZE并手动调整非客户区域的大小 - 在这种情况下将其向下移动20个像素。这意味着我“强制”作为非客户区域的区域不会收到WM_NCMOUSEMOVE个消息,但也不会收到WM_MOUSEMOVE个消息。一种方法是强制WM_CAPTION样式,摆脱WM_NCCALCSIZE上的自定义代码,但这并不理想。有没有办法绕过它?

UPDATE2:

WM_NCHITTEST消息存在同样的问题。除非我设置了WS_CAPTION样式集,否则该区域不会触发这些触发。此外,它还以某种方式影响客户区,因为它不再收到WM_LBUTTONDOWN条消息。

1 个答案:

答案 0 :(得分:0)

我不是很肯定你的意思,但我想你是说你要检查标题栏的某个部分被鼠标悬停了。如果是这样,那么可能尝试跟踪窗口大小和位置,然后检查相对于您的窗口位置和大小,是否将鼠标悬停(以像素为单位)。这是我能想到的唯一不使用操作系统特定功能的方法,我尽量避免使用。