我用active exe组件
怎么让active exe的窗体永远在主程序的窗体上面
别说setparent 我试过了 不行

解决方案 »

  1.   

    不知你这处情况,在mainform里用form2,show me,vbModeless这样的写法是否可行呢
      

  2.   

    除了楼上的,也可这样.
    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 LongPrivate Sub Form_Load()
    SetWindowPos Me.HWnd, -1, 0, 0, 0, 0, 2 Or 1
    End Sub
      

  3.   

    一、新建一个标准EXE工程,工程名为工程1,在Form1上放置一个按钮,写下如下代码:
    Private Sub Command1_Click()
        Dim o As New Class1
        o.ShowForm Me
    End Sub
    二、添加一个Active DLL工程,工程名称为工程2,在此工程里增加一个窗口Form1,然后再Class1里写入以下代码:
    Public Sub ShowForm(ByRef frmContainer As Object)
        Form1.Show vbModal, frmContainer
    End Sub
    三、在工程1里引用工程2,然后按F5运行,再点击窗口上的按钮即可。
      

  4.   

    楼上 不行
    我是说activeExe,不是activeDll
    我在activeexe类里写了上述代码
    出错提示:
    错误371
    指定的对象不能做为show()的所有者窗口使用
      

  5.   

    那试试在createparam里把hwndparent设置为所有者窗口,同一进程里不能用form2,show me,vbModeless时都是这样做的,不同进程我没试过
      

  6.   

    对了,你可以用你自己当前程序中的窗体做"永远在主程序的窗体上面"的那个窗体,用.show me,vbModeless显示出来,而把Activex exe里那个窗体setparent成这个置顶的窗体的子窗体嘛
      

  7.   

    设置为调用者的子窗体。
    show 0, frmowner
      

  8.   


    你是说setparent这个API根本不能用在activex exe中吗,报的什么错
      

  9.   


    在active exe中直接使用API函数SetWindowPos将窗口置顶。 
      

  10.   

    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
    SetWindowPos frm.Hwnd(此处是要置顶窗口的句柄), &HFFFF, 0, 0, 0, 0, 1
      

  11.   

    两个窗口A,B,
    设定A置顶并获取焦点.并且用Timer循环执行.
    按照楼主的需求假定A窗口永远置顶在B窗口上.那么A窗口Timer循环置顶,如果是A窗口目前置顶就什么事情都不做,如果A窗口失去焦点,就先置顶一次B窗口获取焦点,再置顶A窗口获取焦点,这样,A就永远在B窗口之上了,如果有第三个窗口插入中间也不怕.因为第三个窗口如果要插入进来,A窗口肯定失去了焦点,就会触发我之前说的