不会吧,SetWindowPos很猛的,怎么可能会出现“遗憾”这种情况呢,是不是你参数没设好啊老兄

解决方案 »

  1.   

    是呀 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轴量化这种从顶部到底部排列的窗口顺序
     
    其實用 form.show 就可以實現的,當一個窗口,沒有加載時用.show 將加載此窗口,當加載的話,用 .show 將在把窗口顯示在其他正常窗口上面
      

  2.   

    用Form.show不行,只是另到该Form对应的任务栏条闪烁。
      

  3.   

    用showwindow并指定nCmdShow 为SW_SHOW
      

  4.   

    【VB声明】
      Private Declare Function SetForegroundWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hwnd As Long) As Long【说明】
      将窗口设为系统的前台窗口。这个函数可用于改变用户目前正在操作的应用程序 【返回值】
      Long,非零表示成功,零表示失败。会设置GetLastError 【备注】
      不应随便使用它,因为一旦程序突然从后台进入前台,可能会使用户产生迷惑【参数表】
      hwnd -----------  Long,带到前台的窗口Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
    Private Sub Form_Load()
        'KPD-Team 1999
        'URL: http://www.allapi.net/
        'E-Mail: [email protected]
        Dim lHandle As Long
        'First we're going to retrieve the handle of this window
        ' "ThunderRT5Form" is the classname of a VB-window
        lHandle = FindWindow("ThunderRT5Form", Me.Caption)
        'Set this window to the foreground
        lHandle = SetForegroundWindow(lHandle)
    End Sub
      

  5.   

    用ZODER就行啦
    好象参数是-1或者0
    具体都给忘了
      

  6.   

    参数是-1
    API:setwindowpos
      

  7.   

    怎样使我的程序总处于屏幕最前方?(Always on top)   如果你想让你的程序处于前方,可以使用以下代码:   Form1.ZOrder   配合计时器使用,每隔一段很小的时间间隔调用这种方法可以使窗体Form1处于屏幕前方,但是用户还是可能使别的窗体在短暂的时间里处于Form1的上方。所以这种方法并不能使窗体真正的实现Always on top,而要真正的Always on top可以使用API函数SetWindowPos,代码如下:   '声明函数: Declare Function SetWindowPos Lib "user32" _ (ByVal h%, ByVal hb%, ByVal x%, ByVal y%, _ ByVal cx%,ByVal cy%,ByVal f%) As Integer Global Const SWP_NOMOVE = 2 Global Const SWP_NOSIZE = 1 Global Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE Global Const HWND_TOPMOST = -1 Global Const HWND_NOTOPMOST = -2 '把窗体放在最前面:   res% = SetWindowPos (Form1.hWnd, HWND_TOPMOST, _ 0, 0, 0, 0, FLAGS) '如果res%=0, 就产生错误   '使窗体恢复普通模式: res% = SetWindowPos (Form1.hWnd, HWND_NOTOPMOST, _ 0, 0, 0, 0, FLAGS)