The source code in this issue is designed for Visual Basic 3.0 and higher. The sample executables are available in 16-bit and 32-bit versions. The code will work in 16-bit or 32-bit versions of Visual Basic.
We are going to discuss a windows feature called "Always On Top." You have seen this feature used in toolbars and rollup menus to ensure they are always available to your application. The Windows Help system has this feature to allow you to keep a help window above your application window so you can follow the steps shown in the help pages.
This subroutine will turn on and off the Always On Top flag for the form that is passed as a parameter.
AlwaysOnTop(frmToolbar, True)This call will turn on the Always On Top feature of the form called frmToolbar.
' The SetWindowPos API call is the trick to getting the
' always on top feature to turn on and off.
#If Win16 Then
Declare Sub SetWindowPos Lib "User" (ByVal hWnd As Integer, ByVal hWndInsertAfter As Integer, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer)
#Else
Declare Function SetWindowPos Lib "user32" (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
#End If
' Set some constant values for SetWindowPos (from WINAPI.TXT).
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_SHOWWINDOW = &H40
Public Const HWND_NOTOPMOST = -2
Public Const HWND_TOPMOST = -1
Public Sub AlwaysOnTop(frm As Form, bOnTop As Boolean)
' Turn on the TopMost attribute.
'
' Also passes the current position and size
' in Pixels. Since window coordinates in
' VB are usually Twips we do a division to
' determine the correct number of pixels.
If bOnTop Then
lFlag = HWND_TOPMOST
Else
lFlag = HWND_NOTOPMOST
End If
SetWindowPos frm.hWnd, lFlag, _
frm.Left / Screen.TwipsPerPixelX, _
frm.Top / Screen.TwipsPerPixelY, _
frm.Width / Screen.TwipsPerPixelX, _
frm.Height / Screen.TwipsPerPixelY, _
SWP_NOACTIVATE Or SWP_SHOWWINDOW
End Sub
That concludes this issue of COTW. We hope you find the source code useful in your development.
The below describes the ways you can supply us some feedback about COTW. We would like to see our members help mold COTW into the best Visual Basic source code resource available. But to do that we need your feedback about what you like and what you do not like about COTW.
If you have any suggestions for topics you would like to see covered or questions about this issue, please email them to info@codeoftheweek.com or use online feedback form at http://www.codeoftheweek.com/feedback.html.
If you have any source code you would like to submit for possible inclusion in COTW, please fill out our online submission form at http://www.codeoftheweek.com/submission.html.
If you have received this issue in a free offer, please check out http://www.codeoftheweek.com to order your own subscription to COTW. For a limited time you can get 52 issues of COTW for only $19.95. This is a full year of Visual Basic source code and information to help with all your development. So don't wait, subscribe now!