处理窗口的滚动条的鼠标移动(WinAPI)

时间:2010-05-17 02:05:54

标签: winapi scrollbar

我有一个具有滚动条样式的窗口,因此它有自己的滚动条。当鼠标悬停在滚动条上时,我想要发生一些事情,但处理窗口的鼠标移动并不能解决问题。如何处理滚动条的mousemove事件?

由于

2 个答案:

答案 0 :(得分:1)

在Win32 API中,滚动条没有'mousemove事件'。您从垂直滚动条获得的唯一消息是WM_VSCROLL

如果您希望滚动条具有特殊行为,则必须对它们进行子类化并覆盖Mouse Messages的处理。正如它在MSDN中所说的那样(Scroll Bar Controls in Win32):

  

但是,如果你想改变   标准外观或功能   滚动条,你可以子类   窗口上的滚动条或   创建一个独立的控件。

您可以通过搜索“子类滚动条”找到执行此操作的代码示例。

修改

  

我要做的是使用边缘   滚动条的制作我的子窗口   可调整大小,这可能吗?

滚动条不是这样做的方法。相反,在滚动条的右侧(和高)一起定义一个宽几个像素的窗口。将该窗口的光标设置为“调整大小”光标(以便用户知道单击并拖动):

resize cursors

当该窗口收到WM_LBUTTONDOWN消息时,它应该开始跟踪鼠标,调整大小并在鼠标移动时重新绘制控件。当窗口获得WM_LBUTTONUP时,它应该停止跟踪并将控件保持为新的大小。

Here's some code将帮助您开始使用鼠标跟踪功能。这是绘制线条,但过程类似。

答案 1 :(得分:0)

检查拦截WM_NCMOUSEMOVE是否有帮助。

  

发布了WM_NCMOUSEMOVE消息   移动光标时到窗口   在非客户区域内   窗口。此消息已发布到   包含光标的窗口。如果一个   窗口捕获了鼠标,这个   消息未发布。