0

MFC アプリケーションがあり、Direct2D を使用してカスタム コントロールを描画したいと考えています。

コントロールを透明にする必要があります。OnEraseBkgnd を上書きしてafxGlobalData.DrawParentBackground.

Direct2D では、ID2D1HwndRenderTarget を使用し、BeginDraw/EndDrawOnPaing メソッドから呼び出しています。問題は、このメソッドは、描画/クリア関数を呼び出さなくても、領域全体を黒くクリアすることです。

Direct2D で透明な画像の上に描画する方法はありますか?

ありがとう!

4

1 に答える 1

0

最終的に回避策を実装することになりました。私は2つの解決策を見つけました:

  1. Direct2D/GDI 相互運用性の使用: OnPaint で を取得し、CPaintDCを作成しD2D1DCRenderTargetてバインドします。この解決策は非常に単純ですが、私の場合、パフォーマンスが制限されていない場合でも、パフォーマンスが非常に低下しました。

  2. afxGlobalData.DrawParentBackgroundCBitmap オブジェクトでコントロールの背景を取得するために、CDC im memoryを呼び出します。次に、レンダリング ターゲット オブジェクトの Clear メソッドを呼び出す代わりに、CBitmap から D2D1Bitmap を作成し、それを使用してコントロールの背景をクリアします。これはより多くのコードを意味しますが、パフォーマンスは向上します (少なくとも私の場合はプロファイリングに多くの時間を費やしませんでした - パフォーマンスは必須ではありませんが、できる限り最善の方法で物事を行うのが好きです)。

もちろん、透明な CWnd で描画できる方がよいでしょう。この回避策には、親ウィンドウの上にコントロールを完全に配置する必要があるという欠点があります。そうしないと、コントロールの背景の一部しか表示されません。したがって、mw を呼び出さずに D2D1HwndRenderTarget を使用してこれを実装できた場合は、afxGlobalData.DrawParentBackgroundmw に知らせてください。

于 2012-12-05T11:52:20.403 に答える