在MFC中使用Direct2D绘制几何图形

Drawing geometries with Direct2D in MFC

本文关键字:Direct2D 绘制 几何图形 MFC      更新时间:2023-10-16

如何在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*,CD2DBrash*)':

无法将参数1从"ID2D1EllipseGeometry*"转换为'CD2D几何*'

我知道类型之间存在冲突,但从我所检查到的情况来看,没有一个MFC类继承自CD2DGeometry,CD2DGeometric是一个抽象类,pRenderTarget希望CD2DGeomethy*作为其第一个参数
我真的很困惑
非常感谢您的帮助。

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();
}

还有CCD_ 5。您可以使用CreateHwndRenderTarget来获得ID2D1HwndRenderTarget