2016-04-16 187 views
0

MFCアプリケーションでpRenderTargetと互換性のあるジオメトリオブジェクトを作成するにはどうすればよいですか?MFCでDirect2Dを使用した図形の描画

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

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

} 

私が試した:それは私が持っている、ある

エラーC2664「のボイドCRenderTarget :: FillGeometry(:

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

ああを、私はというエラーを取得しています'ID2D1EllipseGeometry *'から引数1を に変換できません。 「CD2DGeometry *」

CD2DGeometryは抽象クラスであり、pRenderTargetはCD2DGeometryを期待し、私はタイプとの競合があることを理解し、私がチェックするために管理してきたものからCD2DGeometryから継承MFCクラスがありません*を最初の引数として使用します。
私は本当に混乱しています。
本当にありがとうございます。

答えて

0
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()->GetDirect2dFactory()もあります。あなたはCreateHwndRenderTargetを取得するために使用することができますID2D1HwndRenderTarget

+0

セミラニご回答いただきありがとうございます、残念ながらほとんど誤解がありました。私は楕円を埋める必要はありません、私はID2D1EllipseGeometryを別の動物であるCD2DEllipseに塗りつぶしたいと思います。あなたがそれを解決する方法を知っているなら、それは本当に素晴らしいでしょう。 –

+0

MFCに 'ID2D1EllipseGeometry'のクラスがありません' pFactory'と 'ID2D1HwndRenderTarget'を使って、メインAPIへのアクセスを得ることができます –

関連する問題