我用SetWindowPos将窗体固定在其它所有窗口的顶部之后(SetWindowPos frm.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE),当用msgbox弹出消息框时,消息框被这个置顶窗口盖住(看不到),不能用鼠标,只能用回车关闭消息框。请问是不是我用的参数不对?怎么解决?

解决方案 »

  1.   

    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 Command1_Click()
        MsgBox "s"
    End SubPrivate Sub Form_Load()
        SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
    End Sub
      

  2.   

    Private Sub Form_Load()
        SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
    End Sub
    --------------------
    这样也行啊,消息框没有被盖住。
      

  3.   

    这种情况很常见,原因是MsgBox基于的窗体不是你置顶的窗体,但VB的MsgBox不带hWnd参数,使你无法改变MsgBox弹出时所基于的窗体。
    所以你的API用得不彻底,弹出对话框,应该也用API,就是MessageBox,用它指定hWnd为你的至顶窗体的hWnd,问题就可解决。
      

  4.   

    经测试,homezj(小吉) 的方法可以。谢谢各位。