Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Private Declare Sub 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)Private Sub Form_Activate()
    'KPD-Team 1998
    'URL: http://www.allapi.net/
    'E-Mail: [email protected]
    'Set the window position to topmost
    SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
End Sub

解决方案 »

  1.   

    http://www.csdn.net/expert/Topic/499/499697.shtm(晶晶的第三篇口水话:"VB调用API函数使窗口保持在最上层 "....(API相关))
      

  2.   

    在VB开发中可以通过调用SetWindowsPos()API函数实现这个功能。该函数声明如下: Private 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---- hWnd变元是窗口的句柄;x,y是窗口的左上角的坐标;cx、cy是窗口宽度和高度;hWndInsertAfter变元是窗口清单中hWnd窗口前面的窗口句柄,有四个可选值: 序号 可 选 值 作 用
    1 HWND_BOTTOM 把窗口放在窗口清单的底部
    2 HWND_TOP 把窗口放在窗口清单的字符顺序的顶部
    3 HWND_TOPMOST 把窗口放在窗口清单的顶部
    4 HWND_NOTOPMOST 把窗口放在窗口清单的顶部,最上层窗口之下---- WFlags变元为整型值,有八个可选值: 序号 可 选 值 作用
    1 SWP_DRAWFRAME 在窗口周围画一个方框
    2 SWP_HIDEWINDOW 隐藏窗口
    3 SWP_NOACTIVATE 不激活窗口
    4 SWP_NOMOVE 保持窗口当前位置
    5 SWP_NOREDRAW 窗口不自动重画
    6 SWP_NOSIZE 保持窗口当前尺寸
    7 SWP_NOZORDER 保持窗口在窗口清单中的当前位置
    8 SWP_SHOWWINDOW 显示窗口---- 下面的例子程序Test演示了对函数中的以上7个变元作正确的选择后,应用程序运行后窗口总可保持在最上层,程序清单如下: Option Explicit
    Private 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
    Private Const HWND_TOPMOST = -1
    Private Const SWP_SHOWWINDOWS = &H40Private Sub Form_Load()
    Dim retValue As Long
    retValue = SetWindowPos(Me.hwnd,
    HWND_TOPMOST, Me.CurrentX, _
    Me.CurrentY, 300, 300, SWP_SHOWWINDOWS)
    End Sub---- 备注:编写函数声明时,整个函数声明须在一行中写完,不可提行。一般是自动从系统中得到函数声明,方法是从VB的外接程序管理中启动“API 浏览”程序,在“API 浏览”程序中找到所需的函数声明,然后复制到VB代码中。 
      

  3.   

    我认为以下程序最好!(不是我写的)
    Sub AlwaysOnTop(FormName As Form, bOnTop As Boolean)
        '设置页Form总是在最前面
    Dim Success As Integer
    If bOnTop = False Then
        Success% = SetWindowPos(FormName.hWnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
    Else
        Success% = SetWindowPos(FormName.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, FLAGS)
    End If
    End Sub
      

  4.   

    哦,还有----
    Private Const SWP_NOSIZE = &H1
    Private Const SWP_NOMOVE = &H2
    Private Const SWP_NOZORDER = &H4
    Private Const SWP_NOREDRAW = &H8
    Private Const SWP_NOACTIVATE = &H10
    Private Const SWP_FRAMECHANGED = &H20
    Private Const SWP_SHOWWINDOW = &H40
    Private Const SWP_NOCOPYBITS = &H80
    Private Const SWP_NOOWNERZORDER = &H200
    Private Const SWP_DRAWFRAME = SWP_FRAMECHANGED
    Private Const SWP_NOREPOSITION = SWP_NOOWNERZORDER
    Private Const HWND_TOP = 0
    Private Const HWND_BOTTOM = 1
    Private Const HWND_TOPMOST = -1
    Private Const HWND_NOTOPMOST = -2
    Private 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
    Private mbOnTop As Boolean
    Private Property Let OnTop (Setting As Boolean)
    if Setting Then
    SetWindowPos hwnd, -1, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
    Else
    SetWindowPos hwnd, -2, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
    End If
    mbOnTop = Setting
    End Property
     
    Private Property Get OnTop() As Boolean
    'Return the private variable set in Property Let
    OnTop = mbOnTop
    End Property
    调用 OnTop=True 即可让窗口 Always On Top。