使用Direct2D的透明窗口

时间:2012-11-26 14:51:25

标签: mfc controls transparent direct2d

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

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