0

我有一个 MFC 应用程序,我想使用 Direct2D 来绘制我的自定义控件。

我需要我的控件是透明的。我曾经通过欺骗 OnEraseBkgnd 并调用afxGlobalData.DrawParentBackground.

使用 Direct2D,我使用 ID2D1HwndRenderTarget 并BeginDraw/EndDraw从 OnPaing 方法调用。问题是即使不调用任何绘图/清除函数,此方法也会将整个区域清除为黑色。

有没有办法在 Direct2D 中绘制透明图像???

谢谢!

4

1 回答 1

0

我最终最终实施了一种解决方法。我找到了两个解决方案:

  1. 使用 Direct2D/GDI 互操作性:在 OnPaint 中我得到一个CPaintDC,然后我创建一个D2D1DCRenderTarget并绑定它们。这个解决方案非常简单,但即使在我的情况下性能不是限制时,我的性能也很差。

  2. 我调用afxGlobalData.DrawParentBackgroundCDC im memory 以便我在 CBitmap 对象中获得控制背景。然后我从 CBitmap 创建一个 D2D1Bitmap 并使用它来清除控件的背景,而不是调用渲染目标对象的 Clear 方法。这意味着更多的代码,但性能更好(至少在我的情况下,但我没有花太多时间进行分析 - 再次性能不是必须的,但我喜欢尽可能以最好的方式做事)。

当然,能够绘制透明的 CWnd 会更好。此解决方法的缺点是您需要将控件完全放在父窗口上,否则您将只获得控件背景的一部分。所以,如果有人设法用 D2D1HwndRenderTarget 实现这一点,而无需调用,请afxGlobalData.DrawParentBackground让 mw 知道!

于 2012-12-05T11:52:20.403 回答