DOCUMENT:Q244312 31-JUL-2001 [vbwin] TITLE :HOWTO: Add Keyboard Functionality to MDI form Scrollbars PRODUCT :Microsoft Visual Basic for Windows PROD/VER:WINDOWS:5.0,6.0 OPER/SYS: KEYWORDS:kbAPI kbCtrl kbHook kbKeyAccel kbScrollBar kbSDKWin32 kbVBp kbVBp500 kbVBp600 kbWndwMsg ====================================================================== ------------------------------------------------------------------------------- The information in this article applies to: - Microsoft Visual Basic Learning Edition for Windows, versions 5.0, 6.0 - Microsoft Visual Basic Professional Edition for Windows, versions 5.0, 6.0 - Microsoft Visual Basic Enterprise Edition for Windows, versions 5.0, 6.0 ------------------------------------------------------------------------------- SUMMARY ======= An MDI form displays scrollbars when a portion of an MDI child form is moved out of the view of the client area of the MDI parent form. In Visual Basic these scrollbars support mouse clicks but not the keyboard navigation keys. This article shows how to add keyboard support to these scrollbars. The MDIForm can also be made to scroll to the bottom automatically when it loads so that hidden forms are visible. This functionality is added by sending messages to the MDIForm window. MORE INFORMATION ================ Two API calls are needed to achieve this functionality: - GetWindow to obtain the Window Handle of the MDI form's client window so that it can be sent a message telling it to scroll. - SendMessage to actually send the message. Step-by-Step Example:: 1. Start a new Standard EXE project. Form1 is created by default. Set the MDIChild property of Form1 to True. 2. Add the following code to the General Declarations section of Form1: Option Explicit ' The child window in the client area generates the scrollbars, sends a ' message to the MDI client to scroll to the bottom of the window, and ' traps the key pressed. Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer) processKey KeyCode End Sub Private Sub Form_Load() Move 2500, 2500 End Sub 3. On the Project menu, click Add MDI Form to add an MDI form to the project. 4. On the Project menu click Add Module to add a BAS module to the project. 5. Add the following code to the General Declarations section of Module1: Option Explicit 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 6. Run the project. The MDIForm scrolls down to the end. The UP, DOWN, PAGEUP, PAGEDOWN, LEFT and RIGHT keys are now functional. REFERENCES ========== For additional information on accelerator keys and ScrollBars in MDI applications, click the article number below to view the article in the Microsoft Knowledge Base: Q192183 PRB: Accelerator Keys Fail to Work in MDI Child Forms Additional query words: hot key ====================================================================== Keywords : kbAPI kbCtrl kbHook kbKeyAccel kbScrollBar kbSDKWin32 kbVBp kbVBp500 kbVBp600 kbWndwMsg kbGrpDSVB kbDSupport kbAcceleratorKey Technology : kbVBSearch kbAudDeveloper kbZNotKeyword6 kbZNotKeyword2 kbVB500Search kbVB600Search kbVB500 kbVB600 Version : WINDOWS:5.0,6.0 Issue type : kbhowto ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 2001.