2011-02-14 160 views
1

如何將窗體顯示爲不在我的程序中的窗口的子窗體?窗體上的SetParent()的託管方法

我有一個窗口句柄,應該是父,但我沒有看到窗體上的SetParent()的任何託管方法。有一個嗎?似乎form.Show()方法只接受實現IWin32Window的託管對象。

如果沒有託管方法,那麼聲明API以便與未來系統最大程度兼容的首選方法是什麼?像這樣?:

<DllImport("user32.dll")> _ 
Private Shared Function SetParent(hWndChild As IntPtr, hWndNewParent As IntPtr) As IntPtr 
End Function 

是否有可能建立一個實現IWin32Window並以某種方式包裝窗口的類?這將方便做這樣的事情,但我不熟悉IWin32Window:

frmMyForm.Show(New NativeWindowWrapper(12345)) 'Where 12345 is the hWnd of the window I want to wrap 

回答

0

哇哦,我只是發現IWin32Window的文件,並認爲它是隻有一個屬性... Handle。是的,那當然我可以很容易地使這個NativeWindowWrapper類...

我沒有測試過,但我相信它會工作得很好......

Public Class NativeWindowWrapper 
    Implements IWin32Window 

    Private _Handle As IntPtr 

    Public ReadOnly Property Handle As System.IntPtr Implements System.Windows.Forms.IWin32Window.Handle 
     Get 
      Return _Handle 
     End Get 
    End Property 

    Public Sub New(ByVal Handle As IntPtr) 
     Me._Handle = Handle 
    End Sub 
End Class 
相關問題