检测SHIFT、CTRL及ALT键的状态    
鼠标和键盘事件用 shift 参数判断是否按下了 SHIFT、CTRL 和 ALT 键,以及以什么样的组合(如果存在)按下这些键。如果按 SHIFT 键,则 shift 为 1;如果按 CTRL 键,则 shift 为 2;如果按 ALT 键,则 shift 为 4。应使用这些键值的总和来判断这些组合。例如,同时按下 SHIFT 和 ALT 键时 shift 等于 5 (1 + 4)。

如图 11.5 所示,shift 中的三个最不明显位对应 SHIFT、CTRL 和 ALT 键的状态。

图 11.5 位如何表示 SHIFT、CTRL 和 ALT 键的状态



根据 SHIFT、CTRL 和 ALT 键的状态可在 shift 中设置任一位或设置所有位。下表列出这些值和常数:

二进制值 十进制值 常数 意义
001 1 vbShiftMask 按 SHIFT 键。
010 2 vbCtrlMask 按 CTRL 键。
100 4 vbAltMask 按 ALT 键。
011 3 vbShiftMask + vbCtrlMask 按 SHIFT 键和 CTRL 键。
101 5 vbShiftMask + vbAltMask 按 SHIFT 键和 ALT 键。
110 6 vbCtrlMask + vbAltMask 按 CTRL 键和 ALT 键。
111 7 vbCtrlMask + vbAltMask + vbShiftMask 按 SHIFT、CTRL 和 ALT 键。


象对鼠标事件的 button 参数那样,可将 If匱hen匛lse 语句或 And 操作符与 Select Case 语句组合使用以判断是否按下 SHIFT、CTRL 和 ALT 键以及以什么样的组合(若存在)按下这些键。

打开一个新工程并将变量 ShiftTest 添加到窗体的声明部分:

Dim ShiftTest as Integer

将下列代码添加到窗体的 MouseDown 事件中:

Private Sub Form_MouseDown(Button As Integer, _
      Shift As Integer, X As Single, Y As Single)
   ShiftTest = Shift And 7
   Select Case ShiftTest
      Case 1 ' 或 vbShiftMask
         Print "You pressed the SHIFT key."
      Case 2 '或 vbCtrlMask
         Print "You pressed the CTRL key."
      Case 4 '或 vbAltMask
         Print "You pressed the ALT key."
      Case 3
         Print "You pressed both SHIFT and CTRL."
      Case 5
         Print "You pressed both SHIFT and ALT."
      Case 6
         Print "You pressed both CTRL and ALT."
      Case 7
         Print "You pressed SHIFT, CTRL, and ALT."
      End Select
End Sub

关联文档