【问题标题】:Drawing geometries with Direct2D in MFC在 MFC 中使用 Direct2D 绘制几何图形
【发布时间】:2016-04-17 09:16:56
【问题描述】:

如何在 MFC 应用程序中创建与 pRenderTarget 兼容的几何对象?也就是说,我有:

LRESULT CWorkSpaceBar::OnDrawDirect2D(WPARAM wParam, LPARAM lParam)
{
    CHwndRenderTarget* pRenderTarget = (CHwndRenderTarget*)lParam;

    pRenderTarget->FillGeometry(//<<-- here I need a geometry, i.e. an Ellipse Geometry

}  

我试过了:

ID2D1EllipseGeometry *m_pEllipseGeometry = nullptr;
    ID2D1Factory *pFactory = nullptr;
    m_pEllipseGeometry->GetFactory(&pFactory);
    pFactory->CreateEllipseGeometry(ellipse, &m_pEllipseGeometry);
    pRenderTarget->FillGeometry(m_pEllipseGeometry, m_pBlackBrush);  

唉,我收到一条错误消息:

错误 C2664 'void CRenderTarget::FillGeometry(CD2DGeometry *,CD2DBrush *,CD2DBrush *)':

无法将参数 1 从 'ID2D1EllipseGeometry *' 转换为 'CD2DGeometry *'

我知道存在类型冲突,但据我所知,没有从 CD2DGeometry 继承的 MFC 类,CD2DGeometry 是一个抽象类,pRenderTarget 期望 CD2DGeometry* 作为它的第一个参数。 我真的很困惑。
非常感谢任何帮助。

【问题讨论】:

    标签: c++ mfc


    【解决方案1】:
    ID2D1EllipseGeometry *m_pEllipseGeometry = nullptr;
    ID2D1Factory *pFactory = nullptr;
    m_pEllipseGeometry->GetFactory(&pFactory);
    

    这将失败,因为 m_pEllipseGeometrynullptr。要使用 MFC,请尝试以下示例:

    pRenderTarget->Clear({ 1, 1, 1, 1 });
    CRect rc(0, 0, 100, 100);
    CD2DRectF d2d_rect(rc);
    CD2DEllipse ellipse(&d2d_rect);
    CD2DSolidColorBrush brush(pRenderTarget, { 0.5f, 0.5f, 0.5f, 1 });
    pRenderTarget->FillEllipse(ellipse, &brush);
    

    查看头文件,MFC 似乎根本不支持ID2D1EllipseGeometry。要访问pFactory,请使用以下示例:

    if (SUCCEEDED(D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pFactory))
    {
        ...
        pFactory->Release();
    }
    

    还有AfxGetD2DState()-&gt;GetDirect2dFactory()。可以使用CreateHwndRenderTarget获取ID2D1HwndRenderTarget

    【讨论】:

    • Semirani 您好,感谢您的回答,不幸的是,有一点误会。我不想填充椭圆,我想填充 ID2D1EllipseGeometry,它与 CD2DEllipse 不同。如果你知道如何解决它,那就太好了。
    • MFC 没有ID2D1EllipseGeometry 的类您可以使用pFactoryID2D1HwndRenderTarget 来访问主要API
    猜你喜欢
    • 1970-01-01
    • 2016-09-14
    • 2014-07-15
    • 2016-04-23
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    相关资源
    最近更新 更多