【问题标题】:Direct2D Transparency With MFC使用 MFC 的 Direct2D 透明度
【发布时间】:2014-12-16 20:44:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: c++ mfc direct2d


    【解决方案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

    【讨论】:

    • 非常感谢彼得的帮助,非常感谢!
    猜你喜欢
    • 2016-11-22
    • 2012-11-14
    • 2013-02-21
    • 2017-04-08
    • 2012-03-06
    • 2021-02-04
    • 2011-06-14
    • 2011-07-30
    • 2011-06-04
    相关资源
    最近更新 更多