如何把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设为子窗体。 我不太明,请高手说详细点,最好有事例代码,谢谢

解决方案 »

  1.   

    '*******************************
    '下面是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
      

  2.   

    Rick110AAA(海牛猪猪 And HerosⅢ之比蒙) 你好,谢谢你帮我解决了问题,但我还想问问:现在是子窗体在主窗体里边,能不能做到子窗体完全覆盖主窗体?
    或者做到就象在同一工程内主窗体MDIForm,子窗体是普通窗体时二都都最大化时的效果?可以吗?高手,请帮我解答一下,谢谢你了
      

  3.   

    '增加一个API函数和常量
    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