2

別のUIElementのOnRenderメソッドをオーバーライドし、DrawingContextを使用してプリミティブを直接描画することにより、WPFウィンドウでかなり複雑な「イメージ」(多くの場合、更新が必要で、多くの描画プリミティブがあります)をペイントしています。

私の質問は、舞台裏で正確に何が起こっているのかということです。私が理解している限り、これは保持モードを使用していません(これは、Shapesをコントロールに配置した場合に当てはまります)。このような描画では、実際には背面でGDI +を使用するだけで、独自の問題が発生するのではないかと心配しているので、質問しています(たとえば、GDI +で描画したものを印刷すると、すでに時間と労力がかかります)。

良いリソースはありますか(私を啓発することができなかったように思われる明らかなMSDNリソース以外に)?

それとも私はすべてを完全に間違っていますか?

私を正しい方向に向ける答えをありがとう。[編集:つづり]

4

1 に答える 1

1

保持モードを引き続き使用しています。高レベルのオブジェクト(アニメーションオブジェクトなどは使用しない)を使用しているのではなく、単純な点や線などを使用しています。

私はDrawingContextのソースを掘り下げましたが、私が知る限り、いくつかの低レベルのウィザードを使用して、これらすべてのDrawXYZコマンドをキューにプッシュしているようです(キュー自体は任意のサイズの構造体で構成され、それぞれが特定のコマンドを示します) 。

次に、WPFは、この質問でレンダリングスレッドと呼ばれる別のスレッドでこのキューを処理します。これは確認していませんが、WPFはすべての描画にStreamingContextを使用していると思います。

さらに、このbogpostからわかるように、WPFはレンダリングにDirectXを使用しています。これにより、WPFが実際に何を実行するかがよくわかります。

これがあなたのために物事を明らかにすることを願っています。

于 2013-02-11T07:14:59.477 に答える