【问题标题】:Transparent window using Direct2D使用 Direct2D 的透明窗口
【发布时间】:2012-11-14 01:44:55
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

    标签: mfc controls transparent direct2d


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-02-21
      • 2021-02-04
      • 1970-01-01
      • 2019-04-24
      • 2011-05-31
      • 2015-08-15
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      相关资源
      最近更新 更多