C# 如何将窗口所有者设置为非托管窗口

C# 如何将窗口所有者设置为非托管窗口,c#,winforms,pinvoke,C#,Winforms,Pinvoke,我想将所有者窗体设置为未更改窗口的窗体。我有非托管窗口的句柄。如何将此非托管窗口设置为托管窗体的所有者窗口 IntPtr hWnd = GetUnmanagedWindow();//assume the handle is returned correctly Form form = new Form(); form.Show(ConvertToManaged(hWnd));//Need an implementation for ConvertOrSomething() 执行此操作的标准方法

我想将所有者窗体设置为未更改窗口的窗体。我有非托管窗口的句柄。如何将此非托管窗口设置为托管窗体的所有者窗口

IntPtr hWnd = GetUnmanagedWindow();//assume the handle is returned correctly
Form form = new Form();
form.Show(ConvertToManaged(hWnd));//Need an implementation for ConvertOrSomething()

执行此操作的标准方法是使用类


正如Hans所指出的,记住在使用ReleaseHandle时调用它。

执行此操作的标准方法是使用该类


正如Hans指出的,当你处理完它时,记得打电话给ReleaseHandle。

你是指家长还是所有者?他们是不同的。@DavidHeffernan-谢谢你提供的信息。我是说主人。你是说父母,还是说主人?他们是不同的。@DavidHeffernan-谢谢你提供的信息。我是指所有者。虽然编写自己的IWin32Window实现很容易,但您也可以使用内置的.net类。虽然编写自己的IWin32Window实现很容易,但您也可以使用内置的.net类。因此,根据Hans的说法,只需添加nativeWindow.ReleaseHandle;作为最后一行?我这样试过,似乎效果不错。所以根据Hans的说法,只需添加nativeWindow.ReleaseHandle;作为最后一行?我这样试过,似乎效果不错。
public ManagedWindow ConvertToManaged(IntPtr hWnd)
{
   return new ManagedWindow(hWnd);
}

    public class ManagedWindow : IWin32Window
    {
        IntPtr _handle;
        public IntPtr Handle
        {
            get { return _handle; }
        }

        public ManagedWindow(IntPtr handle)
        {
            _handle = handle;
        }
    }
IntPtr hWnd = GetUnmanagedWindow();//assume the handle is returned correctly
Form form = new Form();
NativeWindow nativeWindow = new NativeWindow();
nativeWindow.AssignHandle(hWnd);
form.Show(nativeWindow);