窗体处于最前端,但还不完全是最前端,因为要位于开始状态条的后边效果类似于Foxmail中收、发邮件时候右下角弹出的窗体~~

解决方案 »

  1.   

    窗体显示的时候自动就是在最前面而在任务栏之后啊?
    你需要的可能是这个函数。
    SetForegroundWindow VB声明 
    Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long 
    说明 
    将窗口设为系统的前台窗口。这个函数可用于改变用户目前正在操作的应用程序 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hwnd Long,带到前台的窗口 
    注解 
    不应随便使用它,因为一旦程序突然从后台进入前台,可能会使用户产生迷惑
     
      

  2.   

    怎么用啊?——————————————
    详细说明:Private Sub Form_Load()
    '设置窗体为最上层
    Me.Top = CurSysFrm.Height + 100
    Me.Left = CurSysFrm.Width - Me.Width
    SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3'取消:SetWindowPos(OnTop.hwnd, -2, 0, 0, 0, 0, 3)
    Timer1.Enabled = True
    End Sub
    Private Sub Timer1_Timer()
    Me.Top = Me.Top - 100
    If Me.Top <= CurSysFrm.Height - Me.Height Then
        Timer1.Enabled = False
    End If
    End Sub开始的时候,窗体在右下角不可见的位置,一点点移动上来,移动的时候,要求在所有窗体之上,但是在任务栏之下,上边的程序作出来,是在所有的,包括任务栏之上拉
      

  3.   

    SetForegroundWindow 并不好用,我用定时器调用SetForegroundWindow ,但是该窗体并没有跑到前台来!!~而且我要求的不一定非要让窗体获得焦点,只是想让它可见
      

  4.   

    ' 这样不就可以了.Option ExplicitPrivate Sub Form_Load()
    '设置窗体为最上层
    Me.Top = Screen.Height
    Me.Left = Screen.Width - Me.Width'取消:SetWindowPos(OnTop.hwnd, -2, 0, 0, 0, 0, 3)
    Timer1.Enabled = True
    End Sub
    Private Sub Timer1_Timer()
    Me.Top = Me.Top - 100
    If Me.Top <= Screen.Height - Me.Height Then
        Timer1.Enabled = False
    End If
    End Sub
      

  5.   

    你给的程序和我的区别就在于没有把程序窗体弄到最顶端,但是我需要保留这个功能阿~~
    网络上给得让任务栏保持最顶端的Api并不好用,郁闷~~
      

  6.   

    从屏幕的最下端缓缓升起一个窗体,不管这时候你运行什么软件,都不影响,因为这个窗体是在最上边的,也就是置顶的窗体;
    但是任务栏是固定的,也是置顶的窗体,这时候我需要这两个置顶的窗体:
    任务栏和我的程序窗体有个次序,也就是说,任务栏更在我窗体的前边!!SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3hTaskBar = FindWindow("Shell_TrayWnd", vbNullString)
    SetWindowPos hTaskBar, -1, 0, 0, 0, 0, 3但是这样子写了之后,我一旦让我的程序获得焦点,任务栏就跑到后边去了,SetWindowPos第三个参数是z序列,怎么能让任务栏的位置在程序之前呢?
    ----------------------------------------------------------------
    原贴内容:
    帖子我看了,可是还是不明白,你具体要实现的效果
    ----------------------------------------------------------------
    原贴内容:
    http://expert.csdn.net/Expert/topic/2692/2692011.xml?temp=.3427851
    谢谢~~
      

  7.   

    ' 在工程中添加两个窗体,一个Form1,一个Form2(并将Form2的BorderStyle的属性设成0)。
    ' 在Form1中添加一个按钮Command1。
    ' 在Form2中添加两个定时器,一个Timer1,一个Timer2。
    ' 运行后单击Form1中的按钮,会看到一个黑色的窗口缓缓滚出。符合楼主的要求!!!' Form1中的代码:
    Option ExplicitPrivate Sub Command1_Click()
        Form2.Show
    End Sub' Form2中的代码:Option Explicit
    Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SetWindowPos Lib "user32.dll" (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 Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hwnd As Long) As Long
    Private Declare Function GetWindowRect Lib "user32.dll" (ByVal hwnd As Long, lpRect As RECT) As Long
    Private Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)Private Const HWND_NOTOPMOST = -2
    Private Const HWND_TOPMOST = -1
    Private Const SWP_NOMOVE = &H2
    Private Const SWP_NOSIZE = &H1Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
    End TypeDim hTaskbar As Long, TaskbarHeight As LongPrivate Sub Form_Load()
        Dim rctTaskbar As RECT
        Me.BackColor = vbBlack
        Me.Top = Screen.Height
        Me.Left = Screen.Width - Me.Width
        hTaskbar = FindWindow("Shell_TrayWnd", vbNullString)
        GetWindowRect hTaskbar, rctTaskbar
        TaskbarHeight = (rctTaskbar.Bottom - rctTaskbar.Top) * Screen.TwipsPerPixelY
        SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
        SetWindowPos hTaskbar, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
        Timer1.Interval = 1
        Timer1.Enabled = True
    End SubPrivate Sub Timer1_Timer()
        Me.Top = Me.Top - 100
        SetForegroundWindow hTaskbar
        If Me.Top <= Screen.Height - TaskbarHeight - Me.Height + 60 Then
            Timer1.Enabled = False
            Sleep 2000
            Timer2.Interval = 1
            Timer2.Enabled = True
        End If
    End SubPrivate Sub Timer2_Timer()
        Me.Top = Me.Top + 100
        If Me.Top >= Screen.Height Then
            Timer2.Enabled = False
            SetWindowPos hTaskbar, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
            Unload Me
        End If
    End Sub
      

  8.   

    问题有二:1、点击后实际上又获得了焦点
    2、下移后依旧在状态栏之前循环使用SetForegroundWindow~~??昨天我们几个朋友实现的方法是利用鼠标移动的时候,使用SetWindowPos;就是不知道SetWindowPos的第三个参数,那个z序列能否对程序有所帮助~~
      

  9.   

    我已经解决了上面问题解决方法如下:Private Sub lblInfo_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
    '设置鼠标按下,页面下移
        Timer1.Enabled = True
        SetForegroundWindow hTaskBar
        InfoFrm.Enabled = False
        Timer1.Interval = 1
        MoveSize = -100
    End SubPrivate Sub Timer1_Timer()
    Me.Top = Me.Top - MoveSize
    If MoveSize > 0 Then
        If Me.Top <= CurSysFrm.Height - Me.Height Then
            Timer1.Enabled = False
        End If
    Else
        SetForegroundWindow hTaskBar
        If Me.Top > CurSysFrm.Height Then
            Unload Me
        End If
    End If
    End Sub
      

  10.   

    我试的下移时窗体是在taskbar之后啊。下面是SetWindowPos的说明。SetWindowPos VB声明 
    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 
    说明 
    这个函数能为窗口指定一个新位置和状态。它也可改变窗口在内部窗口列表中的位置。该函数与DeferWindowPos函数相似,只是它的作用是立即表现出来的(在vb里使用:针对vb窗体,如它们在win32下屏蔽或最小化,则需重设最顶部状态。如有必要,请用一个子类处理模块来重设最顶部状态 
    返回值 
    Long,非零表示成功,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hwnd Long,欲定位的窗口 
    hWndInsertAfter Long,窗口句柄。在窗口列表中,窗口hwnd会置于这个窗口句柄的后面。也可能选用下述值之一: 
    HWND_BOTTOM 将窗口置于窗口列表底部 
    HWND_TOP 将窗口置于Z序列的顶部;Z序列代表在分级结构中,窗口针对一个给定级别的窗口显示的顺序 
    HWND_TOPMOST 将窗口置于列表顶部,并位于任何最顶部窗口的前面 
    HWND_NOTOPMOST 将窗口置于列表顶部,并位于任何最顶部窗口的后面 
    x Long,窗口新的x坐标。如hwnd是一个子窗口,则x用父窗口的客户区坐标表示 
    y Long,窗口新的y坐标。如hwnd是一个子窗口,则y用父窗口的客户区坐标表示 
    cx Long,指定新的窗口宽度 
    cy Long,指定新的窗口高度 
    wFlags Long,包含了旗标的一个整数 
    SWP_DRAWFRAME 围绕窗口画一个框 
    SWP_HIDEWINDOW 隐藏窗口 
    SWP_NOACTIVATE 不激活窗口 
    SWP_NOMOVE 保持当前位置(x和y设定将被忽略) 
    SWP_NOREDRAW 窗口不自动重画 
    SWP_NOSIZE 保持当前大小(cx和cy会被忽略) 
    SWP_NOZORDER 保持窗口在列表的当前位置(hWndInsertAfter将被忽略) 
    SWP_SHOWWINDOW 显示窗口 
    SWP_FRAMECHANGED 强迫一条WM_NCCALCSIZE消息进入窗口,即使窗口的大小没有改变 
    注解 
    窗口成为最顶级窗口后,它下属的所有窗口也会进入最顶级。一旦将其设为非最顶级,则它的所有下属和物主窗口也会转为非最顶级。Z序列用垂直于屏幕的一根假想Z轴量化这种从顶部到底部排列的窗口顺序