鼠标和键盘事件用 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 '或vbShiftMaskPrint "You pressed the SHIFT key."Case 2 '或vbCtrlMaskPrint "You pressed the CTRL key."Case 4 '或vbAltMaskPrint "You pressed the ALT key."Case 3Print "You pressed both SHIFT and CTRL."Case 5Print "You pressed both SHIFT and ALT."Case 6Print "You pressed both CTRL and ALT."Case 7Print "You pressed SHIFT, CTRL, and ALT."End SelectEnd Sub