私のWPFアプリケーションでは、HwndHostを使用してWin32コンテンツをホストしています。ただし、HwndHostを作成しても、ネイティブウィンドウは作成されません。BuildWindowCore()
むしろ、これは、後でWPFによって呼び出されるオーバーライドされたメソッドで実行されます。
ホストされているコンテンツは、独自の初期化のためにネイティブウィンドウのウィンドウハンドルを必要とします。残念ながら、ウィンドウの作成を強制する方法はありません(つまり、WPFでBuildWindowCoreを呼び出す)ので、初期化されるまでHwndHostをポーリングする2番目のスレッドがあります。
.NET 4.0 / WPF 4.0では、新しいメソッドWindowInteropHelper.EnsureHandle()
が追加されました。これで状況が解決することを期待していましたが、HwndHost(Windowから派生していない)ではなく、Windowでのみ機能します。代わりに私に何ができるか提案がありますか?
編集:
考えられる解決策のために、さらにいくつかの制約を追加するのを忘れました。
- HwndHostは、ユーザー設定に応じて、アプリケーションのメインウィンドウの子になることも、(サードパーティのドッキングマネージャーを介して)新しいウィンドウに配置することもできるコントロールに配置されます。これは、ウィンドウの作成中に、親ウィンドウ(したがってそのhWnd)がどうなるかわからないことを意味します。
- ネイティブコードは初期化中にhWndを必要としますが、ウィンドウはユーザーが表示を要求した場合にのみ表示されます(つまり、最初は表示されません)。可能であれば、ウィンドウを表示する必要はありませんが、すぐに非表示にするだけです。