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

Tim*_*R75 5 c++ winapi visual-c++

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

如何检测鼠标何时位于标题栏的特定区域上?

这是使用 Visual C++ 2010。

更新:

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

更新2:

消息也是同样的问题WM_NCHITTESTWS_CAPTION除非我设置了我不想要的样式,否则该区域不会触发这些。此外,它还会以某种方式影响客户区域,因为它不再接收WM_LBUTTONDOWN消息。

小智 0

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