
Veremos cómo podemos enviar mensajes a una ventana MDI para mover sus barras de scroll respondiendo al teclado. El mismo método se puede emplear también para, por ejemplo, hacer scroll automáticamente hasta el final cuando cargamos una nueva ventana hija.
En un módulo :
Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, _
lParam As Any) As Long
Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, _
ByVal wCmd As Long) As Long
Public Const SB_BOTTOM = 7
Public Const SB_LEFT = 6
Public Const SB_LINEDOWN = 1
Public Const SB_LINELEFT = 0
Public Const SB_LINERIGHT = 1
Public Const SB_LINEUP = 0
Public Const SB_PAGEDOWN = 3
Public Const SB_PAGELEFT = 2
Public Const SB_PAGERIGHT = 3
Public Const SB_PAGEUP = 2
Public Const SB_RIGHT = 7
Public Const SB_THUMBPOSITION = 4
Public Const SB_THUMBTRACK = 5
Public Const SB_TOP = 6
Public Const SB_ENDSCROLL = 8
Public Const WM_HSCROLL = &H114
Public Const WM_VSCROLL = &H115
Public Const GW_CHILD = 5
Public Sub processKey(KeyCode As Integer)
Dim mdiclientwin As Long
Select Case KeyCode
Case vbKeyDown
mdiclientwin = GetWindow(MDIForm1.hwnd, GW_CHILD)
SendMessage mdiclientwin, WM_VSCROLL, SB_LINEDOWN, ByVal 0&
Case vbKeyUp
mdiclientwin = GetWindow(MDIForm1.hwnd, GW_CHILD)
SendMessage mdiclientwin, WM_VSCROLL, SB_LINEUP, ByVal 0&
Case vbKeyPageUp
mdiclientwin = GetWindow(MDIForm1.hwnd, GW_CHILD)
SendMessage mdiclientwin, WM_VSCROLL, SB_PAGEUP, ByVal 0&
Case vbKeyPageDown
mdiclientwin = GetWindow(MDIForm1.hwnd, GW_CHILD)
SendMessage mdiclientwin, WM_VSCROLL, SB_PAGEDOWN, ByVal 0&
Case vbKeyRight
mdiclientwin = GetWindow(MDIForm1.hwnd, GW_CHILD)
SendMessage mdiclientwin, WM_HSCROLL, SB_LINERIGHT, ByVal 0&
Case vbKeyLeft
mdiclientwin = GetWindow(MDIForm1.hwnd, GW_CHILD)
SendMessage mdiclientwin, WM_HSCROLL, SB_LINELEFT, ByVal 0&
End Select
End Sub
En los formularios hijos debemos incluir :
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
processKey KeyCode
End Sub

