1

WinForms コントロール内で wpf コントロールをホストしてから、WinForms コントロールを ActiveX として公開しないと、WPF コントロールを ActiveX として直接公開できないのはなぜですか? 私が読んだすべての記事: -ダイアログ システム アプリケーションの WPF ユーザー コントロール - ActiveX を使用する WPF Vista ガジェット は事実として投稿しますか? しかし、誰も理由を説明していませんか?

4

1 に答える 1

4

大きな理由の 1 つは、それらがまったく異なるグラフィックスおよびレンダリング システムであることです。WPF ウィンドウを作成すると、それは Win32 ウィンドウとはまったく異なるため、ホスト OS とのやり取りが異なります。.NET と COM を考えてみてください。これらはまったく異なる「フレームワーク」であり、どちらも Windows 上で実行され、相互運用できますが、完全に異なり、連携するにはいくつかのフープが必要です。.NETがCOMにあるように、WPFはWinFormsにあると思います。

私が提供する詳細はおそらく単純化しすぎている可能性がありますが、いくつかの例を試してみます。

たとえば、Win32 では、ウィンドウの各コントロール (すべてのラベル、ボタンなど) は、Windows からメッセージを受け取る独自の WindowHandle (およびメッセージ ポンプ) を持つ独自の「ウィンドウ」です。WPF では、ウィンドウは 1 つしかなく (最上位のウィンドウであり、WPF ウィンドウは Win32 の意味でのウィンドウではないため、これはおそらく完全には当てはまりません)、WPF は OS から画面上の適切な要素。詳細については、こちら (ソースへのリンクを含む) を参照してください

もう 1 つの例は、WPF が画面上の視覚要素をレンダリングするために別のアプローチを使用することです。WPF は保持モード グラフィック システムを使用します。これは、Win32 およびその他の GDI/GDI+ フレームワークが使用する即時モード グラフィック システムとは異なります。詳細については、こちらをご覧ください。

他にも多くの理由があると思いますが、結局のところ、それらはまったく異なるテクノロジです。したがって、それらを連携させるには、いくつかの手順を踏む必要があります (相互運用のために 2 つのホスト コントロールを使用します)。WPF、特にグラフィックスとレンダリングに関する高度なトピックについて読むほど、WinForms との「互換性」だけではない理由をよりよく理解できるようになることをお勧めします。

于 2012-07-02T14:41:11.213 に答える