我想做一个窗体,是一个通用的窗体(里面有picture),pic里面可以放别的窗体,
要有通用性,也就是说放入的窗体用若干个。
听说是用到API:
Public Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
别的,就不知道了

解决方案 »

  1.   

    我想做一个窗体,是一个通用的窗体(里面有picture),pic里面可以放别的窗体,
    要有通用性,也就是说放入的窗体用若干个。pic里面可以放别的窗体 
    上面这就是不可能实现的啊!能把pic放到别的窗体上,但不能在pic里放窗体!
      

  2.   

    ' 做两个窗体Form1和Form2,Form1里放一个PictureBox和一个CommandButton。
    ' 运行后单击Command1可以把Form2放到Form1的PictureBox里。Option Explicit
    Private Declare Function SetParent Lib "user32.dll" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As LongPrivate Sub Command1_Click()
        SetParent Form2.hWnd, Picture1.hWnd
        Form2.Show
    End Sub
      

  3.   

    同意楼上。
    SetParent 就是为窗体设置一个新父。
    hWndChild 子窗体句柄(HWND)。
    hWndNewParent 新父窗体的句柄。
    (新父可以是窗体控件,也可以是有HWND 的控件)
      

  4.   

    SetParent VB声明 
    Declare Function SetParent Lib "user32" Alias "SetParent" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long 
    说明 
    指定一个窗口的新父(在vb里使用:利用这个函数,vb可以多种形式支持子窗口。例如,可将控件从一个容器移至窗体中的另一个。用这个函数在窗体间移动控件是相当冒险的,但却不失为一个有效的办法。如真的这样做,请在关闭任何一个窗体之前,注意用SetParent将控件的父设回原来的那个) 
    返回值 
    Long,前一个父窗口的句柄 
    参数表 
    参数 类型及说明 
    hWndChild Long,子窗口的句柄 
    hWndNewParent Long,hWndChild的新父 
    注解 
    可用这个函数在运行期将vb控件置入容器控件内部(比如将一个按钮设成图象或窗体控件的子窗口),或者将控件从一个容器控件移至另一个。控件移至另一个父后,它的位置将由新父的坐标系统决定。这样一来,有必要重新规定控件的位置,使其能在目标位置显示出来
     
      

  5.   

    按上面大侠们告诉我的,我已经成功做出来了
    1)可是没有完全完成我的想法(可以在picturebox里嵌出不同的窗体),我现在有若干个窗体,想写一个方法,可以用参数的方法,让我想要的窗体显示在里面呢,谢谢高手
    2)就是如何写关闭外面父窗体时的代码?(不要只写end的那种)就是如何先注销里面的窗体,再关外面的父窗体,万分感谢!!!
      

  6.   

    第一个问题写个循环往里放就是了。
    第二个问题没看明白。按你的要求,为什么不用MDI呢?有现成的啊!
      

  7.   

    身边没有vb,手写一段吧,有错莫怪:dim newfrm as form'窗体级变量然后在一个事件中:
    set newfrm=forms.add(欲加入窗体的名称(string变量)
    newfrm.show
    接下来用SetParent为newfrm设置新父,代码略至于第2个问题
    处理主窗体的unload事件就可以了:
    unload newfrm
    set newfrm=nothing
      

  8.   

    set newfrm=forms.add(欲加入窗体的名称(string变量))
      

  9.   

    按上面大侠们告诉我的,我已经成功做出来了
    1)可是没有完全完成我的想法(可以在picturebox里嵌出不同的窗体),我现在有若干个窗体,想写一个方法,可以用参数的方法,让我想要的窗体显示在里面呢,谢谢高手
    2)就是如何写关闭外面父窗体时的代码?(不要只写end的那种)就是如何先注销里面的窗体,再关外面的父窗体,万分感谢!!!我也是这么做的,给你个通用的过程
    Public Sub loadChildForm(mForm As Form)
      Dim slng As Long
      'FrmMaster.PicForm(MDI主窗体.Picture控件)
      slng = SetParent(mForm.hwnd, FrmMaster.PicForm.hwnd)
      mForm.Move 0, 0
    End Sub子窗体调用,每一个窗体都一样:Private Sub Form_Load()
      Call loadChildForm(Me)
    End Sub
    第二个问题,如果是用MDI窗体做容器,不用考虑此问题,Unload MDIFrom就可以自动注销的
    如果是普通窗体,就在容器窗体Unload过程里逐一Unload所有的窗体就可以了。需要的时候,调用这个过程即可,简单问题不要复杂化了。