VB3 How to Create a System-Modal Program/Window (72674)
The information in this article applies to:
- Microsoft Visual Basic Standard Edition for Windows 2.0
- Microsoft Visual Basic Standard Edition for Windows 3.0
- Microsoft Visual Basic Professional Edition for Windows 2.0
- Microsoft Visual Basic Professional Edition for Windows 3.0
- Microsoft Visual Basic Standard Edition for Windows 1.0
This article was previously published under Q72674 SUMMARY
From a Microsoft Visual Basic for Windows program, you can disable the
ability to switch to other Windows programs by calling the Windows API
function SetSysModalWindow.
MORE INFORMATION
Microsoft Windows is designed so that the user can switch between
applications without terminating one program to run another program.
There may be times when the program needs to take control of the
entire environment and run from only one window, restricting the user
from switching to any other application. An example of this is a
simple security system, or a time-critical application that may need
to go uninterrupted for long periods of time.
Passing the handle to the window through the argument of
SetSysModalWindow will limit the user to that particular window. This
will not allow the user to move to any other applications with the
mouse or use ALT+ESC or CTRL+ESC to bring up the Task Manager. You can
even remove the system menu if you do not want the user to exit
through the ALT+F4 (Close) combination.
All child windows that are created by the system-modal window become
system-modal windows. When the original window becomes active again,
it is system-modal. To end the system-modal state, destroy the
original system-modal window.
Care must be taken when using the SetSysModalWindow API from within
the Visual Basic for Windows programming environment. Pressing
CTRL+BREAK to get to the [break] mode leaves your modal form with no
way to exit unless you restart your system. When using the
SetSysModalWindow within the environment, be sure to exit your
application by destroying the window with either the ALT+F4 in the
system menu, or by some other means from within your running program.
To use the SetSysModalWindow API function, declare the API call in
your global section, as follows:
Declare Function SetSysModalWindow Lib "User" (ByVal hwnd%) As Integer
At an appropriate place in your code, add the following:
Success% = SetSysModalWindow(hwnd)
Once this line is executed, your window will be the only window that
can get focus until that window is destroyed.
NOTE: Because Visual Basic for Windows was not designed with system modal
capabilities in mind, using a MsgBox, InputBox, or Form.Show of
another form from a system modal window will not work correctly. If
you want to show another window from a system modal form, use another
Visual Basic for Windows form and call SetSysModalWindow for this second
form also, so that it becomes the system modal window. When the second
form is unloaded, the original system modal form will again become the
system modal window. Note that because the window(s) shown from a
system modal window must also call SetSysModalWindow, and since
MsgBox/InputBox windows cannot have associated code, you should not
call the MsgBox or InputBox functions from a system modal window.
Modification Type: | Major | Last Reviewed: | 12/12/2003 |
---|
Keywords: | KB72674 |
---|
|