OPTION 1
IWin32WindowだけあなたはすでにのIntPtrを持っているので、実装するにはあまりにも難しいことではありませんHandle
プロパティを、期待しています。 IWin32Windowを実装Create a wrapperクラス:
IWin32Window win32Window = new WindowWrapper(new WindowInteropHelper(this).Handle);
または(KeithS」提案に応じて)::
IWin32Window win32Window = new WindowWrapper(this);
OPTION 2
public class WindowWrapper : System.Windows.Forms.IWin32Window
{
public WindowWrapper(IntPtr handle)
{
_hwnd = handle;
}
public WindowWrapper(Window window)
{
_hwnd = new WindowInteropHelper(window).Handle;
}
public IntPtr Handle
{
get { return _hwnd; }
}
private IntPtr _hwnd;
}
あなたは、このようなあなたのIWin32Windowになるだろう(スコットチェンバレンのコメントにthx)
IWin32Windowを実装する既存のNativeWindowクラスを使用します。
IWin32Window win32Window = new NativeWindow();
((NativeWindow)win32Window).AssignHandle(new WindowInteropHelper(this).Handle);
偉大な答えです。しかし、クラスはWindowを受け取り、WindowInteropHelperの最初のレイヤーを扱うこともできるので、必要なのは 'new WindowWrapper(this)'だけで、何かをIWin32Windowとして渡すことができます。 – KeithS
独自のクラスを作成する代わりに、.NETは既に['NativeWindow'](https://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow%28v=vs)に同様のクラスを用意しています。 110%29.aspx)クラス。ハンドルを使って['AssignHandle(IntPtr)'](https://msdn.microsoft.com/en-us/library/system.windows.forms.nativewindow.assignhandle(v = vs.110).aspx) OPによって提供される機能。 –
オプション2をコンパイルできませんでした。私のコード... 'System.Windows.Forms.IWin32Window win32Window = new System.Windows.Forms.NativeWindow(); win32Window.AssignHandle(new WindowInteropHelper(this).Handle); ' ...「IHin32WindowにはAssignHandleの定義がありません」というコンパイルエラーが発生します。 IWin32WindowのSystem.Windows.Interopバージョンを使用しようとしましたが、NativeWindow()メソッドがありません。 –