我有一个MFC应用程序,我想使用Direct2D绘制我的自定义控件。
我需要我的控制是透明的。我过去常常欺骗我的控件,使其成为父母,方法是击败OnEraseBkgnd并调用afxGlobalData.DrawParentBackground。
使用Direct2D,我使用ID2D1HwndRenderTarget并从OnPaing方法调用BeginDraw/EndDraw。问题是,即使不调用任何绘图/清除函数,这种方法也可以清除整个黑色区域。
有没有办法在Direct2D中绘制透明图像?
谢谢!
发布于 2012-12-05 11:52:20
我终于实现了一个解决方案。我找到了两个解决方案:
CPaintDC,然后创建一个D2D1DCRenderTarget并绑定它们。这个解决方案很简单,但是我的性能很差,即使在我的情况下性能不是一个限制。afxGlobalData.DrawParentBackground调用到CDC im内存,以便在CBitmap对象中获得控制背景。然后,我从D2D1Bitmap中创建一个CBitmap,并使用它来清除控件的背景,而不是调用render目标对象的清除方法。这意味着更多代码,但性能更好(至少在我的情况下,但我没有花太多时间进行分析--性能也不是必须的,但我喜欢尽可能地以最好的方式做事情)。当然,能画出一个透明的CWnd会更好。这种解决方法的缺点是,您需要将控件完全放在父窗口之上,否则只会得到部分控件背景。所以,如果有人在没有调用D2D1HwndRenderTarget的情况下成功地用afxGlobalData.DrawParentBackground实现了这一点,请让mw知道!
https://stackoverflow.com/questions/13567272
复制相似问题