此段源程序一定能解决你的问题!:Option ExplicitPrivate 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 LongConst HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2
Const SWP_NOACTIVATE = &H10
Const SWP_SHOWWINDOW = &H40
Const SWP_NOMOVE = &H2
Const SWP_NOSIZE = &H1Const FormFlags = SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW Or SWP_NOACTIVATEPublic Sub WindowAlwaysOnTop(Form_Hwnd As Long, vStaus As Boolean)
       
       Dim Dummy As Long
       
       If vStaus Then
          ' 常在顶端
          Dummy = SetWindowPos(Form_Hwnd, HWND_TOPMOST, 0, 0, 0, 0, FormFlags)
       Else
          ' 不常在顶端
          Dummy = SetWindowPos(Form_Hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, FormFlags)
       End If
       
End SubPrivate Sub Form_Load()
        ' 举例
        WindowAlwaysOnTop Me.hwnd, True
End Sub郭子

解决方案 »

  1.   

    不行!
    用你的OICQ和这个程序比比,就知道了。
      

  2.   

    简单来讲,Windows 的窗口分为两类:一类为高居顶端,另一类为正常窗口。但如果有多个窗口为高居顶端窗口,则其相互之间的覆盖关系同正常窗口相同。如果你要一直保证你的窗口也居于其他同类窗口之上,则必须对你的窗口周期性调用SetForegroundWindow(),但这样将干扰其他程序正常运行。另外,你可以仔细钻研一下微软的有关于Z-Order方面的资料,也许能另外找到解决办法。
      

  3.   

    印象中好像Always On Top有级别之分,但想不起来怎么设置。比如任务栏就比一般的Always On Top级别高,但它不是最高,记得好像是第二高还是第三高,还可以设置为更高的。但已经是很久以前的事的,不太清楚,但应该有这回事。
      

  4.   

    '声明:
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, y, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long 
    Private Const HWND_TOPMOST = -1 '前
    Private Const HWND_NOTOPMOST = -2 '普
    Private Const SWP_NOMOVE =  2 
    Private Const SWP_NOSIZE =  1 
    Private Const TOPMOST_FLAGS = SWP_NOMOVE Or SWP_NOSIZE 
    '代码:放在form1_load()中
    SetWindowPos Form1.hwnd, HWND_TOPMOST, 0, 0, 0, 0, TOPMOST_FLAGS'前
      

  5.   

        有一个函数是改变窗口Z-Order的,常居顶端的窗口也是有顺序的,设置到顶端就行了.从dandycheung的那个函数SetForegroundWindow()开始查.