Direct2D透明度与MFC

时间:2014-12-16 20:44:16

标签: c++ mfc direct2d

我希望创建一个具有透明区域的子框架(CWnd子类)。

但是,我似乎无法让透明度部分正常工作。根据我的理解,我需要在使用ID2D1HwndRenderTarget标记(as seen here)创建D2D1_ALPHA_MODE_IGNORE时启用透明度。但是,我不会以这种方式创建渲染目标。相反,我在EnableD2DSupport()方法中使用了OnCreate()。当我尝试使用不透明度设置为0.0的颜色使用CHwndRenderTarget::Clear(ColorF)清除渲染目标时,将忽略不透明度。我在处理AFX_WM_DRAW2D消息的函数中执行此操作,渲染目标取自LPARAM

关于如何让透明度为此工作的任何想法?

1 个答案:

答案 0 :(得分:1)

D2D1_ALPHA_MODE_IGNORE means what it says - 忽略Alpha通道(图纸始终不透明)。 SO问题,当图纸始终透明时,您已将目标链接到相反的问题。

如我所见,EnableD2DSupport()创建了ID2D1HwndRenderTarget,但很可能带有D2D1_ALPHA_MODE_IGNORE标记。您需要D2D1_ALPHA_MODE_PREMULTIPLIEDD2D1_ALPHA_MODE_STRAIGHT,因此您可以使用Alpha频道。

如果可能,请使用正确的Alpha模式手动创建ID2D1HwndRenderTarget,然后使用CHwndRenderTarget::Attach

将其附加到CHwndRenderTarget

另一种方式(我会选择)是Direct2D 1.1方式(更精确 - ID2D1DeviceContext),手动管理整个绘图过程。对于一些指导,请查看this answer