1

プログラムにないウィンドウの子としてフォームを表示するにはどうすればよいですか?

親になるウィンドウ ハンドルがありますが、フォームに 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
4

1 に答える 1

0

うわー、IWin32Window のドキュメントを見つけたところ、それが 1 つのプロパティしかないことがわかりました... 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
于 2011-02-16T14:33:32.140 に答える