17

私は WPF アプリを作成しており、このライブラリを利用したいと考えています。

IntPtrを使用してウィンドウの を取得できます

new WindowInteropHelper(this).Handle

しかし、それは にキャストされませんSystem.Windows.Forms.IWin32Window。この WinForms ダイアログを表示する必要があります。

IntPtrにキャストするに はどうすればよいSystem.Windows.Forms.IWin32Windowですか?

4

1 に答える 1

36

オプション1

HandleIWin32Window は、既に IntPtr を持っているため、実装するのがそれほど難しくないプロパティ のみを想定しています。IWin32Window を実装するラッパー クラスを作成します。

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 を取得します。

IWin32Window win32Window = new WindowWrapper(new WindowInteropHelper(this).Handle);

または(KeithSの提案に応じて):

IWin32Window win32Window = new WindowWrapper(this);

オプション 2 (Scott Chamberlain のコメントに感謝)

IWin32Window を実装する既存の NativeWindow クラスを使用します。

NativeWindow win32Parent = new NativeWindow();
win32Parent.AssignHandle(new WindowInteropHelper(this).Handle);
于 2012-04-24T10:55:28.680 に答える