You are currently offline, waiting for your internet to reconnect

How To Create a Form That Always Stays on Top

This article was previously published under Q184297
Microsoft Visual Basic does not offer a property or method to make a formthe topmost window. This behavior can be achieved using the SetWindowPosWin32 API.

This article demonstrates how to set a form as the topmost window using theSetWindowPos Win32 API.
The sample code below uses a function called SetTopMostWindow. TheSetTopMostWindow function sets a window as a topmost Window or as a normalWindow, based on the two parameters, hwnd and Topmost, passed to it.

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

The Topmost parameter specifies whether to set the form as topmost or asnormal. If the value is true, the function sets the form to always remainon top. If the value is false, the function sets the form as a normalwindow.

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 isused as a line-continuation character.

  8. Press F5 to run the project.
If you click the "Always on top" command button, your form becomes thetopmost window and remains on top of every window; you cannot move anyother window on top of it. If you click the "Normal" button, the formbehaves normally (you can move other windows on top of it).
For additional information, please see the following articles in theMicrosoft Knowledge Base:
84251 How to Create a Topmost or Floating Window in Visual Basic

150233 BUG: Topmost Window Does Not Stay on Top in Design Environment
Also view the sample project, CallDlls, located in the VB\Samples\CallDllsfolder. The CallDlls sample has code to set a Form as the topmost windowand is illustrated in the sample.
always on top topmost splash screen SetWindowPos System Modal

Article ID: 184297 - Last Review: 07/15/2004 20:38:00 - Revision: 2.3

  • 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
  • kbhowto KB184297