如何把ActiveX Dll中的Form显示为子窗体
问: 我在ActiveX Dll中存在一个Form,但我想在调用它时,将它显示为子窗体。请告诉我具体做法。 谢谢 答:
如果显示的Form是Modal的,你就无法将其设为子窗口。下面只谈论你的Form是非Modal的。
如果ActiveX DLL不是你设计的,你在调用时可以先用FindWindow等函数获得Form的hWnd,然后利用API函数SetParent将Form设为子窗体。
如果ActiveX DLL是你设计的,你可以使用API函数GetActiveWindow获得当前程序的活动窗口,,然后利用API函数SetParent将Form设为子窗体。 我不太明,请高手说详细点,最好有事例代码,谢谢
问: 我在ActiveX Dll中存在一个Form,但我想在调用它时,将它显示为子窗体。请告诉我具体做法。 谢谢 答:
如果显示的Form是Modal的,你就无法将其设为子窗口。下面只谈论你的Form是非Modal的。
如果ActiveX DLL不是你设计的,你在调用时可以先用FindWindow等函数获得Form的hWnd,然后利用API函数SetParent将Form设为子窗体。
如果ActiveX DLL是你设计的,你可以使用API函数GetActiveWindow获得当前程序的活动窗口,,然后利用API函数SetParent将Form设为子窗体。 我不太明,请高手说详细点,最好有事例代码,谢谢
'下面是ActiveXDll中的代码
'1、将工程名称改为:TestChildForm
'2、将类模块的名称改为:clsTest
'3、添加一个窗体,名称改为:frmTest
'-------------------------------
'下面是类模块clsTest的代码:
Option ExplicitPublic Function ShowChildForm() As Long
Dim frmTmp As New frmTest
ShowChildForm = frmTmp.hWnd
frmTmp.Show
End Function
'-------------------------------
'写好以后,,编译成Dll
'
'然后,新建一个Exe工程,记住,一定要引用你刚才编译的ActiveXDll
'在窗体里面添加一个Command控件
'下面是调用Dll的工程的代码:
Option ExplicitPrivate Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As LongPrivate Sub Command1_Click()
Dim clsTmp As New TestChildForm.clsTest
Dim hWndChild As Long
hWndChild = clsTmp.ShowChildForm()
SetParent hWndChild, Me.hWnd
End Sub
或者做到就象在同一工程内主窗体MDIForm,子窗体是普通窗体时二都都最大化时的效果?可以吗?高手,请帮我解答一下,谢谢你了
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private Const SW_MAXIMIZE = 3'将Command1 的Click事件修改一下:
Private Sub Command1_Click()
Dim clsTmp As New TestChildForm.clsTest
Dim hWndChild As Long
hWndChild = clsTmp.ShowChildForm()
SetParent hWndChild, Me.hWnd
ShowWindow hWndChild, SW_MAXIMIZE
End Sub