检测鼠标按钮

编写代码,使之对鼠标事件作出不同的响应,这取决于用到哪个鼠标按钮或者是否按下了 SHIFT、CTRL、ALT 键,这样一来应用程序的功能将更强大。为提供这些选择,请使用 MouseDown、MouseUp 和 MouseMove 事件过程及 buttonshift 参数。本章后面的“检测 SHIFT、CTRL 和 ALT 键的状态”介绍了使用 shift 参数的方法。

MouseDown、MouseUp 和 MouseMove 事件用 button 参数判断按下的是哪个鼠标按钮或哪些鼠标按钮。button 参数是位域参数─ 一个值,其每位代表一个状态或条件。这些值被表示成整数。如图 11.4 所示,三个最不明显位(最低位)分别表示鼠标的左按钮、右按钮和中按钮。

图 11.4 如何用位表示鼠标的状态

每一位的缺省值为 0 (False)。如果未按下任何按钮,则三位的二进制值为 000。如果按下左按钮,则二进制值(或模式)变为 001。左按钮的位值由 0 (False) 变为 1 (True)。

button 参数用十进制数值或常数表示这些二进制模式。下表列出了位的二进制值、相应的十进制值和 Visual Basic 常数:

二进制值 十进制值 常数 意义
001 1 vbLeftButton 按下左按钮。
010 2 vbRightButton 按下右按钮。
100 4 vbMiddleButton 按下中间按钮。

注意 Visual Basic 提供常数来表示 buttonshift 参数的二进制值。这些常数可与相应的十进制数值互换使用。但是,并非所有值都有对应常数。直接将十进制值相加就可导出某些按钮值或按钮与/或 shift 键组合的值。

将十进制数值 4 分配给鼠标中间按钮。同时按下左、右按钮就会产生单个数值 3 (1+2)。对于三按钮鼠标,同时按下三个按钮将产生十进制数值 7 (4+2+1)。下表中列出从可能的按钮组合中导出的其它按钮值:

二进制值 十进制值 常数 意义
000 0   未按下任何按钮。
011 3 vbLeftButton + vbRightButton 按下左、右按钮。
101 5 vbLeftButton + vbMiddleButton 按下左按钮和中间按钮。
110 6 vbRightButton + vbMiddleButton 按下右按钮和中间按钮。
111 7 vbRightButton + vbMiddleButton + vbLeftButton 按下三个按钮。