在一个工程里面,有一个子窗体,我想一直让它置顶,所以我用了SetWindowPos API,但是在前面已经加载有模式窗体的情况下再加载使用SetWindowPos置顶的窗体时,这个子窗体便不能再接收到事件了。开始不明白,后来我做了个测试,发现在使用SetWindowPos加载置顶子窗体前,必须前面没有加载任何的其它有模式窗体,否则就会造成上述情况。我现在想问有没有办法在已经加载过有模式窗体的情况下可以让其它窗体置顶?
在线等待,谢谢!!

解决方案 »

  1.   

    声明 
    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 置顶: SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3
    恢复正常 SetWindowPos Me.hwnd, -2, 0, 0, 0, 0, 3
      

  2.   

    to  jhzhou882(狂刀客) :我的意思是在弹出有模式窗体的情况下让另外一个子窗体置顶。to 回复人: gxhwq(Buger) :没错的我也是这样用的: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
    Const HWND_TOPMOST = -1
    Const HWND_NOTOPMOST = -2
    Const SWP_NOSIZE = &H1
    Const SWP_NOMOVE = &H2
    Const SWP_NOACTIVATE = &H10
    Const SWP_SHOWWINDOW = &H40Dim Success As Long
      Success = SetWindowPos(EtKlokControl.hWnd, -1, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE)
      

  3.   

    不要用模式窗口,自己动手用Enabled模仿效果