Udostępnij za pośrednictwem


Jak rysować i wypełniać kształt podstawowy

W tym temacie opisano sposób rysowania kształtu podstawowego. Interfejs ID2D1RenderTarget udostępnia metody tworzenia i wypełniania elips, prostokątów i linii. W poniższych przykładach pokazano, jak utworzyć i narysować wielokropek.

Ten temat zawiera następujące sekcje:

Rysuj kontur elipsy z jednolitym pociągnięciem

Aby narysować kontur elipsy, trzeba zdefiniować pędzel (taki jak ID2D1SolidColorBrush lub ID2D1LinearGradientBrush) do malowania konturu oraz D2D1_ELLIPSE opisujący wymiary i położenie elipsy, a następnie przekazać te obiekty do ID2D1RenderTarget::DrawEllipse. W poniższym przykładzie tworzony jest pędzel o czarnym, jednolitym kolorze i zapisywany w składowej klasy m_spBlackBrush.

hr = m_pRenderTarget->CreateSolidColorBrush(
    D2D1::ColorF(D2D1::ColorF::Black),
    &m_pBlackBrush
    );

W następnym przykładzie zdefiniowano D2D1_ELLIPSE i użyto go za pomocą pędzla zdefiniowanego w poprzednim przykładzie w celu narysowania konturu elipsy. Ten przykład generuje dane wyjściowe pokazane na poniższej ilustracji.

ilustracja elipsy z solidnym obramowaniem

D2D1_ELLIPSE ellipse = D2D1::Ellipse(
    D2D1::Point2F(100.f, 100.f),
    75.f,
    50.f
    );

m_pRenderTarget->DrawEllipse(ellipse, m_pBlackBrush, 10.f);

Narysuj elipsę z kreskowanym pociągnięciem

W poprzednim przykładzie użyto zwykłej kreski. Można zmodyfikować wygląd obrysu na kilka sposobów, tworząc ID2D1StrokeStyle. ID2D1StrokeStyle umożliwia określenie kształtu na początku i końcu pociągnięcia, w tym, czy ma wzorzec kreski, itd. Poniższy przykład tworzy ID2D1StrokeStyle opisujący pociągnięcie przerywane. W tym przykładzie użyto wstępnie zdefiniowanego wzorca kreski, D2D1_DASH_STYLE_DASH_DOT_DOT, ale można również określić własne.

D2D1_STROKE_STYLE_PROPERTIES strokeStyleProperties = D2D1::StrokeStyleProperties(
    D2D1_CAP_STYLE_FLAT,  // The start cap.
    D2D1_CAP_STYLE_FLAT,  // The end cap.
    D2D1_CAP_STYLE_TRIANGLE, // The dash cap.
    D2D1_LINE_JOIN_MITER, // The line join.
    10.0f, // The miter limit.
    D2D1_DASH_STYLE_DASH_DOT_DOT, // The dash style.
    0.0f // The dash offset.
    );

hr = m_pDirect2dFactory->CreateStrokeStyle(strokeStyleProperties, NULL, 0, &m_pStrokeStyle);

W następnym przykładzie użyto stylu pociągnięcia z metodą DrawEllipse. Ten przykład generuje dane wyjściowe pokazane na poniższej ilustracji.

ilustracja elipsy z przerywaną kreską

m_pRenderTarget->DrawEllipse(ellipse, m_pBlackBrush, 10.f, m_pStrokeStyle);

Rysowanie i wypełnianie elipsy

Aby pomalować wnętrze elipsy, należy użyć metody FillEllipse. W poniższym przykładzie użyto metody DrawEllipse, aby nakreślić elipsę, a następnie użyto metody FillEllipse do malowania jej wnętrza. Ten przykład generuje dane wyjściowe pokazane na poniższej ilustracji.

ilustracja elipsy z kreskowaną linią, wypełniona jednolitym szarym kolorem

m_pRenderTarget->DrawEllipse(ellipse, m_pBlackBrush, 10.f, m_pStrokeStyle);
m_pRenderTarget->FillEllipse(ellipse, m_pSilverBrush);

Następny przykład najpierw wypełnia elipsę, a następnie rysuje jej kontur. Ten przykład generuje dane wyjściowe pokazane na poniższej ilustracji.

ilustracja elipsy wypełniona jednolitym szarym kolorem, a następnie wyróżniona kreskowanym pociągnięciem

m_pRenderTarget->FillEllipse(ellipse, m_pSilverBrush);
m_pRenderTarget->DrawEllipse(ellipse, m_pBlackBrush, 10.f, m_pStrokeStyle);

Kod został pominięty w tych przykładach.

Rysowanie bardziej złożonych kształtów

Aby narysować bardziej złożone kształty, należy zdefiniować obiekty ID2D1Geometry i używać ich z metodami DrawGeometry i FillGeometry. Aby uzyskać więcej informacji, zobacz Geometrie — omówienie.

Geometrie — omówienie

Szczotki — omówienie