我有一个具有滚动条样式的窗口,因此它有自己的滚动条。当鼠标悬停在滚动条上时,我想要发生一些事情,但处理窗口的鼠标移动并不能解决问题。如何处理滚动条的mousemove事件?
由于
答案 0 :(得分:1)
在Win32 API中,滚动条没有'mousemove事件'。您从垂直滚动条获得的唯一消息是WM_VSCROLL
。
如果您希望滚动条具有特殊行为,则必须对它们进行子类化并覆盖Mouse Messages的处理。正如它在MSDN中所说的那样(Scroll Bar Controls in Win32):
但是,如果你想改变 标准外观或功能 滚动条,你可以子类 窗口上的滚动条或 创建一个独立的控件。
您可以通过搜索“子类滚动条”找到执行此操作的代码示例。
修改强>
我要做的是使用边缘 滚动条的制作我的子窗口 可调整大小,这可能吗?
滚动条不是这样做的方法。相反,在滚动条的右侧(和高)一起定义一个宽几个像素的窗口。将该窗口的光标设置为“调整大小”光标(以便用户知道单击并拖动):
当该窗口收到WM_LBUTTONDOWN消息时,它应该开始跟踪鼠标,调整大小并在鼠标移动时重新绘制控件。当窗口获得WM_LBUTTONUP时,它应该停止跟踪并将控件保持为新的大小。
Here's some code将帮助您开始使用鼠标跟踪功能。这是绘制线条,但过程类似。
答案 1 :(得分:0)
检查拦截WM_NCMOUSEMOVE是否有帮助。
发布了WM_NCMOUSEMOVE消息 移动光标时到窗口 在非客户区域内 窗口。此消息已发布到 包含光标的窗口。如果一个 窗口捕获了鼠标,这个 消息未发布。