Help and Support
 

powered byLive Search

How To Create a Form That Always Stays on Top

Article ID:184297
Last Review:July 15, 2004
Revision:2.3
This article was previously published under Q184297
On This Page

SUMMARY

Microsoft Visual Basic does not offer a property or method to make a form the topmost window. This behavior can be achieved using the SetWindowPos Win32 API.

This article demonstrates how to set a form as the topmost window using the SetWindowPos Win32 API.

Back to the top

MORE INFORMATION

The sample code below uses a function called SetTopMostWindow. The SetTopMostWindow function sets a window as a topmost Window or as a normal Window, based on the two parameters, hwnd and Topmost, passed to it.

The hwnd parameter specifies the handle of the window to be set as topmost or as normal.

The Topmost parameter specifies whether to set the form as topmost or as normal. If the value is true, the function sets the form to always remain on top. If the value is false, the function sets the form as a normal window.

Back to the top

Step-by-Step Example

1.Start a new Standard EXE project. Form1 is created by default.
2.Add two command buttons (Command1 and Command2) to Form1.
3.Set the caption property of Command1 to "Always on top."
4.Set the caption property of Command2 to "Normal."
5.Put the following code in the Form1 Declaration section:
      Option Explicit

      Private Sub Command1_Click()
         Dim lR As Long
         lR = SetTopMostWindow(Form1.hwnd, True)
      End Sub

      Private Sub Command2_Click()
         Dim lR As Long
         lR = SetTopMostWindow(Form1.hwnd, False)
      End Sub

					
6.On the Project menu, click Add Module, to add a new module to the project.
7.Add the following code to the new module:
      Option Explicit
      Public Const SWP_NOMOVE = 2
      Public Const SWP_NOSIZE = 1
      Public Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
      Public Const HWND_TOPMOST = -1
      Public Const HWND_NOTOPMOST = -2

      Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos"  _
            (ByVal hwnd As Long, _
            ByVal hWndInsertAfter As Long, _
            ByVal x As Long, _
            ByVal y As Long, _
            ByVal cx As Long, _
            ByVal cy As Long, _
            ByVal wFlags As Long  ) As Long

      Public Function SetTopMostWindow(hwnd As Long, Topmost As Boolean) _
         As Long

         If Topmost = True Then 'Make the window topmost
            SetTopMostWindow = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, _
               0, FLAGS)
         Else
            SetTopMostWindow = SetWindowPos(hwnd, HWND_NOTOPMOST, 0, 0, _
               0, 0,FLAGS)
            SetTopMostWindow = False
         End If
      End Function

					

NOTE: In the above sample code, an underscore (_) at the end of a line is used as a line-continuation character.

8.Press F5 to run the project.
If you click the "Always on top" command button, your form becomes the topmost window and remains on top of every window; you cannot move any other window on top of it. If you click the "Normal" button, the form behaves normally (you can move other windows on top of it).

Back to the top

REFERENCES

For additional information, please see the following articles in the Microsoft Knowledge Base:
84251 (http://support.microsoft.com/kb/84251/EN-US/) How to Create a Topmost or Floating Window in Visual Basic

150233 (http://support.microsoft.com/kb/150233/EN-US/) BUG: Topmost Window Does Not Stay on Top in Design Environment
Also view the sample project, CallDlls, located in the VB\Samples\CallDlls folder. The CallDlls sample has code to set a Form as the topmost window and is illustrated in the sample.

Back to the top


APPLIES TO
Microsoft Visual Basic 4.0 Professional Edition
Microsoft Visual Basic 5.0 Professional Edition
Microsoft Visual Basic 6.0 Professional Edition
Microsoft Visual Basic 4.0 Enterprise Edition
Microsoft Visual Basic 5.0 Enterprise Edition
Microsoft Visual Basic 6.0 Enterprise Edition

Back to the top

Keywords: 
kbhowto KB184297

Back to the top

Article Translations

 

Other Support Options

  • Need More Help?
    Contact a Support professional by Email, Online or Phone.
  • Customer Service
    For non-technical assistance with product purchases, subscriptions, online services, events, training courses, corporate sales, piracy issues, and more.
  • Newsgroups
    Pose a question to other users. Discussion groups and Forums about specific Microsoft products, technologies, and services.