除了楼上的,也可这样. 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
一、新建一个标准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运行,再点击窗口上的按钮即可。
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
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
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运行,再点击窗口上的按钮即可。
我是说activeExe,不是activeDll
我在activeexe类里写了上述代码
出错提示:
错误371
指定的对象不能做为show()的所有者窗口使用
show 0, frmowner
你是说setparent这个API根本不能用在activex exe中吗,报的什么错
在active exe中直接使用API函数SetWindowPos将窗口置顶。
SetWindowPos frm.Hwnd(此处是要置顶窗口的句柄), &HFFFF, 0, 0, 0, 0, 1
设定A置顶并获取焦点.并且用Timer循环执行.
按照楼主的需求假定A窗口永远置顶在B窗口上.那么A窗口Timer循环置顶,如果是A窗口目前置顶就什么事情都不做,如果A窗口失去焦点,就先置顶一次B窗口获取焦点,再置顶A窗口获取焦点,这样,A就永远在B窗口之上了,如果有第三个窗口插入中间也不怕.因为第三个窗口如果要插入进来,A窗口肯定失去了焦点,就会触发我之前说的