首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Direct2D的透明窗口

使用Direct2D的透明窗口
EN

Stack Overflow用户
提问于 2012-11-26 14:51:25
回答 1查看 896关注 0票数 0

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

我需要我的控制是透明的。我过去常常欺骗我的控件,使其成为父母,方法是击败OnEraseBkgnd并调用afxGlobalData.DrawParentBackground

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

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

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2012-12-05 11:52:20

我终于实现了一个解决方案。我找到了两个解决方案:

  1. 使用Direct2D/GDI互操作:在OnPaint中,我得到一个CPaintDC,然后创建一个D2D1DCRenderTarget并绑定它们。这个解决方案很简单,但是我的性能很差,即使在我的情况下性能不是一个限制。
  2. 我将afxGlobalData.DrawParentBackground调用到CDC im内存,以便在CBitmap对象中获得控制背景。然后,我从D2D1Bitmap中创建一个CBitmap,并使用它来清除控件的背景,而不是调用render目标对象的清除方法。这意味着更多代码,但性能更好(至少在我的情况下,但我没有花太多时间进行分析--性能也不是必须的,但我喜欢尽可能地以最好的方式做事情)。

当然,能画出一个透明的CWnd会更好。这种解决方法的缺点是,您需要将控件完全放在父窗口之上,否则只会得到部分控件背景。所以,如果有人在没有调用D2D1HwndRenderTarget的情况下成功地用afxGlobalData.DrawParentBackground实现了这一点,请让mw知道!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13567272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档