我希望创建一个具有透明区域的子框架(CWnd子类)。
但是,我似乎无法让透明度部分正常工作。根据我的理解,我需要在使用ID2D1HwndRenderTarget
标记(as seen here)创建D2D1_ALPHA_MODE_IGNORE
时启用透明度。但是,我不会以这种方式创建渲染目标。相反,我在EnableD2DSupport()
方法中使用了OnCreate()
。当我尝试使用不透明度设置为0.0的颜色使用CHwndRenderTarget::Clear(ColorF)
清除渲染目标时,将忽略不透明度。我在处理AFX_WM_DRAW2D
消息的函数中执行此操作,渲染目标取自LPARAM
。
关于如何让透明度为此工作的任何想法?
答案 0 :(得分:1)
D2D1_ALPHA_MODE_IGNORE
means what it says - 忽略Alpha通道(图纸始终不透明)。 SO问题,当图纸始终透明时,您已将目标链接到相反的问题。
如我所见,EnableD2DSupport()
创建了ID2D1HwndRenderTarget
,但很可能带有D2D1_ALPHA_MODE_IGNORE
标记。您需要D2D1_ALPHA_MODE_PREMULTIPLIED
或D2D1_ALPHA_MODE_STRAIGHT
,因此您可以使用Alpha频道。
如果可能,请使用正确的Alpha模式手动创建ID2D1HwndRenderTarget
,然后使用CHwndRenderTarget::Attach
CHwndRenderTarget
另一种方式(我会选择)是Direct2D 1.1方式(更精确 - ID2D1DeviceContext),手动管理整个绘图过程。对于一些指导,请查看this answer。