使用 MFC 的 Direct2D 透明度

Direct2D Transparency With MFC

本文关键字:透明度 Direct2D MFC 使用      更新时间:2023-10-16

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

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

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

D2D1_ALPHA_MODE_IGNORE的意思是它所说的 - 忽略 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),手动管理整个绘图过程。有关一些指导,请查看此答案。