让VB应用程序支持鼠标滚轮
-首先,提问
-自1996年微软推出Intellimouse以来,带滚轮的鼠标开始流行,支持鼠标滚轮的应用软件越来越多。但是我很奇怪为什么VB到6.0本身还是不支持鼠标滚轮,而VF从5.0开始就提供鼠标滚轮事件了。
-如何让VB应用程序支持鼠标滚轮?有一篇MSDN的文章,解决了在VB中应用Intellimouse鼠标的问题。解决这个问题的方法是通过一个几十K的第三方控件来实现的,可惜这个控件没有源代码。况且为了支持鼠标滚轮要用一个第三方控件,似乎得不偿失。本文给出了用纯VB实现这一功能的方法。
-二。解决问题
详细说明:我们知道VB应用程序响应来自Windows的消息,这些消息需要VB来解释。遗憾的是,虽然VB解释了所有的消息,但是只允许用户程序处理事件中的部分消息,其他消息VB自己处理,或者忽略这些消息。
-在VB5.0之前,应用程序不能直接处理VB以外的消息。从VB5.0开始,微软提供了AddressOf运算符,允许用户程序将函数或过程的地址传递给API函数。这样我们就可以在VB应用中编写自己的窗口处理函数,通过AddressOf运算符将VB中定义的窗口地址传递给窗口处理函数,从而绕过VB的解释器,自己处理消息。实际上,这种方法可以用来处理VB中的任何消息。
详细说明:实现支持鼠标滚轮的应用程序的关键是捕获鼠标滚轮消息MSH _鼠标滚轮,WM _鼠标滚轮。MSH _鼠标轮是为95准备的,需要Intellimouse驱动,而WM _鼠标轮是目前Windows(98/NT40/2000)所有版本内置的消息。本文主要处理WM_MOUSEWHEEL消息。以下是WM_MOUSEWHEEL的语法。
WM _ mouse wheel
fwKeys = LOWORD(wParam);/* key flags */
z delta =(short)hi word(wParam);
/*车轮转动*/
xPos =(short)LOWORD(lParam);
/*指针的水平位置*/
yPos =(short)hi word(lParam);
/*指针的垂直位置*/
-其中:fwKeys表示是否按下了CTRL、SHIFT和鼠标键(左、中、右和附加),允许复合。z传输滚轮的速度。小于零的值表示滚轮向后滚动(朝向用户),大于零的值表示滚轮向前滚动(朝向显示器)。LParam表示鼠标指针相对于屏幕左上角的x和y轴坐标。
-滚动键相当于普通三键鼠标的中键。根据滚动按钮的动作,Windows分别发出WM_MBUTTONUP、WM_MBUTTONDOWN、WM_MBUTTONDBLCLK消息。这些消息VB已经在鼠标事件中得到支持。
0条评论