【发布时间】:2013-12-19 14:47:49
【问题描述】:
我有一个自定义的窗口标题栏。我还在这个栏上画了一个位图,我想知道何时有人用鼠标光标悬停在它上面。我已经处理了WM_NCMOUSEMOVE 消息,但这似乎只在边界触发,而不是我的标题区域本身。
如何检测鼠标何时在标题栏的某个区域上?
这适用于 Visual C++ 2010。
更新:
我已经在一定程度上解决了这个问题。我(故意)没有在窗口上设置WS_CAPTION 样式,而是处理WM_NCCALCSIZE 并手动调整非客户区的大小——在这种情况下将其向下移动20 个像素。这意味着我“强制”作为非客户区的区域不会收到WM_NCMOUSEMOVE 消息,但也不会收到WM_MOUSEMOVE 消息。一种方法是强制WM_CAPTION 样式,摆脱我在WM_NCCALCSIZE 上的自定义代码,但这并不理想。有办法解决吗?
更新2:
WM_NCHITTEST 消息也是同样的问题。除非我设置了我不想要的 WS_CAPTION 样式集,否则该区域不会触发这些。它也以某种方式影响客户区,因为它不再收到WM_LBUTTONDOWN 消息。
【问题讨论】:
-
你确定你的层次结构中没有窗口捕捉到那些 WM_NCMOUSEMOVE 消息吗?您是否在窗口上尝试过 Spy++(来自 Visual Studio 工具)?
-
您应该处理 WM_NCHITTEST 消息并使其在适当时返回 HTCAPTION
-
Oring 与未知值不是我所说的“精确”:-) 所以你的 Window 不是桌面的主 Window 子窗口?
-
我认为是时候停止cmets 20题的游戏,坚持看SSCCE了。
-
@Tim 请告诉我们:您的窗口是您的另一个窗口的子窗口,还是您打算使其成为顶级窗口?
标签: c++ winapi visual-c++